在android开发中,点击不同的区域显示不同的提示,比如地图,我点击广东省就广东省区域高亮,人体图,点击头部区域,头部区域就高亮。这类应用的难点就是区域是不规则的,在网上也没有什么好的解决方案,有人提出个这个需求也没有人给出解决方案,比如下面这个帖子:
http://bbs.youkuaiyun.com/topics/390597311
就是地图的应用,也没人给出解决方案。
google了很久,找出了一个比较好的解决方案http://www.cnblogs.com/vanezkw/p/3806360.html?utm_source=tuicool&utm_medium=referral,我在上面做了一些改造,实现了人体区域点击的效果,但是原理跟链接上的一样,先看下效果
原理就是多张图片叠起来,每个图片显示一部分,点击的时候根据透明度来判断的点击的是哪一部分,下面贴出这个自定义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.youkuaiyun.com/nn955/article/details/49784341
本文介绍了一种在Android应用中实现不规则区域点击识别的方法,并提供了一个自定义View的示例。该方法通过堆叠多个View并利用透明度来判断点击位置,但存在加载速度慢和内存消耗大的问题。
6735

被折叠的 条评论
为什么被折叠?



