Android ImageView单击最佳实践
我是安多德的新手 在我的例子中,我有一个场景,当单击图像的某个部分时,它将触发onclick事件。我试图在onTouch被触发时检测位置,它可以工作,但我认为这不是一个标准的实现,那么对于这种情况,什么是最佳实践呢 谢谢 下面是一些代码,如: imgView.setOnTouchListener((OnTouchListener)新建OnTouchListener(){Android ImageView单击最佳实践,android,onclick,imageview,onclicklistener,Android,Onclick,Imageview,Onclicklistener,我是安多德的新手 在我的例子中,我有一个场景,当单击图像的某个部分时,它将触发onclick事件。我试图在onTouch被触发时检测位置,它可以工作,但我认为这不是一个标准的实现,那么对于这种情况,什么是最佳实践呢 谢谢 下面是一些代码,如: imgView.setOnTouchListener((OnTouchListener)新建OnTouchListener(){ public boolean onTouch(视图v,运动事件){ if(isIn(event.getX(),event.ge
public boolean onTouch(视图v,运动事件){
if(isIn(event.getX(),event.getY(),124,3221,36)){
ShowMemberInfo(R.string.app_m01);
}else if(isIn(event.getX(),event.getY(),8155,72181)){
..
}
返回true;
}
私有布尔值isIn(浮点x,浮点y,int-fx,int-fy,int-tx,int-ty){
返回x fx和&yfy;
}
只需为您的ImageView实现onClickListener()
实现onClick事件的最简单方法是在XML布局中的
中包含android:onClickMe=“methodName”,并在活动文件中定义该方法
例如:
public void methodName(View v)
{
....
....
// do whatever you want for click even ton imageview
}
尝试使用如果要检测用户触摸的位置(相对于ImageView用户触摸的位置),可以从MotionEvent对象获取触摸点 尝试为ImageView注册触摸事件侦听器,并在触发触摸事件时从MotionEvent对象的getX()和getY()方法获取触摸点位置。然后定义一个矩形区域,并使用contains()检查触摸点是否在该区域内
ImageView img = new ImageView(this);
img.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.w("Hit test", "is hit? "+isIn(event.getX(),event.getY(),0,0,120,120));
return false;
}
});
private boolean isIn(float x, float y, int fx, int fy, int tx, int ty){
return new Rect(fx,fy,tx,ty).contains((int)x,(int)y);
}
希望这将对您有所帮助。:)您可以向我们展示您的实现,以便我们知道它是否是标准实现,或者是否有最佳实践?我已经修改了我的答案。:)也许您可以尝试使用Rect定义自定义检测区域和调用包含()检查接触点是否在该区域内。这非常有用…下面的链接可能是更好的方法。。。
ImageView img = new ImageView(this);
img.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.w("Hit test", "is hit? "+isIn(event.getX(),event.getY(),0,0,120,120));
return false;
}
});
private boolean isIn(float x, float y, int fx, int fy, int tx, int ty){
return new Rect(fx,fy,tx,ty).contains((int)x,(int)y);
}