Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ImageView单击最佳实践_Android_Onclick_Imageview_Onclicklistener - Fatal编程技术网

Android ImageView单击最佳实践

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

我是安多德的新手

在我的例子中,我有一个场景,当单击图像的某个部分时,它将触发onclick事件。我试图在onTouch被触发时检测位置,它可以工作,但我认为这不是一个标准的实现,那么对于这种情况,什么是最佳实践呢

谢谢

下面是一些代码,如:

imgView.setOnTouchListener((OnTouchListener)新建OnTouchListener(){

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);
}