安卓 - 点击 ImageView

19

我试图在图片视图被点击时追踪该点击事件,但似乎无法捕获到触摸事件,有什么建议吗?

imgView.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v) {
        Log.v(TAG, " click");
    }
});
3个回答

48

图片通常不可点击,因此我建议您将定义放在

android:clickable="true"
android:focusable="true"
在你的layout.xml文件中为imageView指定图片。 如果这并没有帮助,请编辑您的问题并展示定义图像的布局部分以供我们查看。
编辑: 我试过了,你的代码也对我有效 - 即使使用的是大写的id名称。 请仔细查看LogCat吗?我的有时不会真正更新,除非我再次选择设备。
在Eclipse中这样做,转到“Devices”视图(或先通过“Window”显示它),然后单击一次您的设备/虚拟设备。
如果您在LogCat视图中仍然找不到日志条目,请尝试创建一个过滤器(通过绿色加号,并将其命名为您使用TAG定义的字符串作为“按Log标记”)。
请查看Android开发者>使用DDMS中“使用LogCat”部分。

1
我可以完全使用建议的代码而不设置“android:clickable”。 - Michell Bak
4
如果一个视图没有默认的可点击状态,setonclicklistener可以使其可点击。 - Yashwanth Kumar
1
好的,知道了。我猜我有点困惑 - 如果你想使用android:onClick并在那里链接到一个方法,那么你需要它。那么我希望我们能够得到关于我的答案第二部分的更新。 - sunadorer
1
@Machado 很好的观点。我在最初回答这个问题时,还没有这个属性。现在加上了,以防其他人遇到这篇文章。 - sunadorer

7
您忘记重写onClick方法了。这对我有用,你也应该可以使用 :-)
imgView.setOnClickListener(new View.OnClickListener() {
   //@Override
   public void onClick(View v) {
      Log.v(TAG, " click");         
   }        
});

获取X和Y坐标的方法如下:

imgView.setOnTouchListener(new OnTouchListener() { 
   @Override
   public boolean onTouch(View v, MotionEvent event) {
      // X = event.getX()
      // Y = event.getY()
      return false;
   }            
});

注解类型用于标记覆盖超类中方法声明的方法。如果使用@ Override注释的方法实际上没有覆盖超类中的方法,则编译器会产生错误。 - Michell Bak
请问您能否发布您的整个代码,或者至少与 ImageView 相关的部分? - Michell Bak
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);img=(ImageView)findViewById(R.id.ImageView01); // Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.refresh); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.v(TAG, " 点击");
}
});
- JeffLemon
2
"@Override"注解不就是一个标记吗?虽然它可以但不一定需要使用,但无论是否使用,重写都会发生。 - sunadorer
请查看我的更新答案。如果您使用的是低于1.6.0版本的JRE,则似乎这是一个常见问题。似乎您只需要注释掉@Override注释即可。 - Michell Bak
显示剩余3条评论

3

1)首先通过添加-> android:clickable="true" 使您的图像视图可点击。
2)然后转到您的Java文件并声明一个变量,例如-> private static ImageView imgview;
3)然后添加此功能:

public void OnclickButtonListener() {

    imgview =  findViewById(R.id.imageView3);

    imgview.setOnClickListener(new View.OnClickListener() {
                                      @Override
                                      public void onClick(View v) {
                                          Intent intent=new Intent(timetable.this,MapsActivity.class);
                                          startActivity(intent);
                                      }
    });
}

在构造函数中调用此函数。 希望这样做可以起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接