项目地址:https://github.com/604982372/IrregularView.git

效果显示:


 实现原理 

       我这里实现android不规则区域选择是通过坐标和当前点击区域的颜色(本项目使用蓝色)来实现。

       (1)手机分辨率不同,加载的图片宽高也不同,选择一个流行分辨率手机来打印坐标,把每张图片中蓝色区域的每个坐标(减去左边距,上边距)和每个区域蓝色坐标个数记录下来,存到strings.xml文件里面作为样本。

       (2)使用的时候(可以是不同分辨率手机下运行)将当前点击的坐标减去左边距,上边距,转换为加载到手机内存里面图片的坐标,然后将这个坐标转换为样本图片宽高下对应的坐标(当前手机图片宽高跟样本图片宽高程等比关系)。

       (3)然后从strings.xml中取出样本坐标集合,根据转换后的坐标来查找样本中相同的坐标,记录样本集合中该相同坐标的位置,根据strings.xml记录的每张图片蓝色坐标的个数来判断当前坐标属于哪一张图片,然后将对应的图片显示出来。

        这个功能实现要将选择颜色与图片本身颜色分开,要从图片红绿蓝中选择一个颜色来筛选坐标。比如我项目中的手掌,手掌本来原色为浅黄色RGB值为(254 , 235,196),手掌边界的为暗红色RGB值为(127,11,12),选择区域颜色为蓝色RGB值为(2,169 ,237),蓝色为196,12,237,目标颜色237数值最大,打印坐标的时候由于蓝色跟黄色过度地方颜色会变浅,这里边界最浅B值是208,所以循环判断b值大于207的坐标就打印记录下来

int pixel = bitmap.getPixel(j, k);
int red = Color.blue(pixel);
   if (red >= 207)
   {
     pixels = pixels + red + "*******";
     int x = j * (width / mainBitmapWidth) + paddingLeft;
     int y = k * (height / mainBitmapHeight) + paddingTop;
     coordinates = coordinates + x + "%%" + y + "====";//把坐标拼接起来
     count++;//记录每张图片保存坐标的个数
}

 实现步骤 

1.准备一套图片,每张图片大小一样,可以重合,边界都不要重合,重合会影响准确性。



2.项目中布局(最好切好尺寸图,自定义大小会影响准确性)

<cn.xiwu.myview.IrregularView
    android:id="@+id/il"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:src="@drawable/a"
   />

3.把整套图id传递给IrregularView

@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IrregularView irView = (IrregularView) findViewById(R.id.il);
        irView.setImgResIds(new int[]{
                R.drawable.a,
                R.drawable.c,
                R.drawable.f,
                R.drawable.h,
                R.drawable.i,
                R.drawable.j,
                R.drawable.k,
                R.drawable.l,
                R.drawable.m,
                R.drawable.n,
                R.drawable.o,
                R.drawable.p,
                R.drawable.q,
                R.drawable.r,
                R.drawable.s,
                R.drawable.t,
                R.drawable.u,
                R.drawable.v,
                R.drawable.y});
    }

4.选择一个市面上主流分辨率的手机(我这里选择1920*1080),首次运行是采集坐标所有图蓝色区域坐标(ps:每张图的蓝色区域不重合)

采集坐标的时候要打开线程循环。


(1)收集坐标到Strings.xml文件。

通过"3699coorstr"打印过滤获取坐标,复制粘贴出来

通过"3699coorcount"打印过滤获取每张图片红色区域坐标个数,复制出来


“8%%29”表示坐标点“====”是分隔符

“100”表示第一张图片红色区域坐标有100个

把数据粘贴到strings.xml


注意命名要于IrregularView类中的一致


(2)通过"3699daxiao"打印过滤获取上面选用的模板手机下该图片的大小


修改IrregularView类中的样本宽高


(3)测试通过后记得关闭打印坐标的线程,收集完坐标后,不用在启动该线程。


项目地址:https://github.com/604982372/IrregularView.git


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐