Android不规则图形点击提示选中不同区域

在android开发中,点击不同的区域显示不同的提示,比如地图,我点击广东省就广东省区域高亮,人体图,点击头部区域,头部区域就高亮。这类应用的难点就是区域是不规则的,在网上也没有什么好的解决方案,有人提出个这个需求也没有人给出解决方案,比如下面这个帖子:
http://bbs.csdn.net/topics/390597311
就是地图的应用,也没人给出解决方案。
google了很久,找出了一个比较好的解决方案http://www.cnblogs.com/vanezkw/p/3806360.html?utm_source=tuicool&utm_medium=referral,我在上面做了一些改造,实现了人体区域点击的效果,但是原理跟链接上的一样,先看下效果
Android不规则图形点击提示选中不同区域_第1张图片
原理就是多张图片叠起来,每个图片显示一部分,点击的时候根据透明度来判断的点击的是哪一部分,下面贴出这个自定义View的代码,我做了下改动
ClickareaView.java

public class ClickareaView extends FrameLayout {
    private int width = -1;
    private int height = -1;
    private Bitmap bitmap;

    public ClickareaView(Context context) {
        super(context);
    }

    public ClickareaView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ClickareaView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        if (action != MotionEvent.ACTION_DOWN) {
            int x = (int)event.getX();
            int y = (int)event.getY();
            if(width == -1 || height == -1) {
                Drawable drawable = ((StateListDrawable)getBackground()).getCurrent();
                bitmap = ((BitmapDrawable)drawable).getBitmap();
                width = getWidth();
                height = getHeight();
            }

            if(null == bitmap || x < 0 || y < 0 || x >= width || y >= height) {
                return super.onTouchEvent( event);
            }
            int pixel = bitmap.getPixel( x, y);
            if(Color.TRANSPARENT == pixel) {
                setPressed(false);
            }
            return super.onTouchEvent(event);
        }
        int x = (int) event.getX();
        int y = (int) event.getY();
        if (width == -1 || height == -1) {
            Drawable drawable = ((StateListDrawable) getBackground()).getCurrent();
            bitmap = ((BitmapDrawable) drawable).getBitmap();
            width = getWidth();
            height = getHeight();
        }
        if (null == bitmap || x < 0 || y < 0 || x >= width || y >= height) {
            return false;
        }
        int pixel = bitmap.getPixel(x, y);
        if (Color.TRANSPARENT == pixel) {
            return false;
        }
        return super.onTouchEvent(event);
    }
}

需要几个区域就几个View叠起来,我用这种方法解决了不规则区域点击的问题,但是这个有很大的问题,就是加载这个界面很慢,甚至在低配的手机上会出现OOM异常,这也可以理解就是很多图片在这个界面被加载,又不能缓存什么的。各位看官,如果大家有什么好的办法,请给我留言,万分感谢。
最后给出整个源码的下载地址:
下载

http://yq135314.iteye.com/blog/1883315
http://blog.csdn.net/nn955/article/details/49784341

你可能感兴趣的:(android)