Android:onTouch()永远不会被调用?

前端之家收集整理的这篇文章主要介绍了Android:onTouch()永远不会被调用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在玩UI事件处理,我找到了一些我无法从 Android Dev找到解释的东西:我有一个ImageView和一个TextView,每当我触摸ImageView时,TextView都会显示一条消息.但以下代码不起作用:
  1. public class ShowSomething extends Activity {
  2. private LinearLayout ll;
  3.  
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6.  
  7. setContentView(R.layout.main);
  8.  
  9. LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);
  10. final TextView textview = (TextView)findViewById(R.id.textview);
  11. MyImageView image = new MyImageView(this,textview);
  12. image.setImageResource(R.drawable.icon);
  13. ll.addView(image,48,48);
  14.  
  15. }
  16. }

和MyImageView.java

  1. public class MyImageView extends ImageView implements OnTouchListener{
  2.  
  3.  
  4. private TextView textview;
  5.  
  6. public MyImageView(Context context,TextView textview) {
  7. super(context);
  8. this.textview = textview;
  9. }
  10.  
  11. @Override
  12. public boolean onTouch(View v,MotionEvent event) {
  13. textview.setText("Event captured !");
  14. return true;
  15. }
  16. }

main.xml中

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/linearLayout"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:orientation="vertical"
  7. >
  8. <TextView
  9. android:id="@+id/textview"
  10. android:layout_width="fill_parent"
  11. android:layout_height="wrap_content"
  12. android:text="Holder"
  13. />
  14. </LinearLayout>

但是当我像这样在MyImageView上附加一个OnTouchListener时,它确实有效:
文件ShowSomething.java

  1. public class ShowSomething extends Activity {
  2.  
  3. private LinearLayout ll;
  4.  
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7.  
  8. setContentView(R.layout.main);
  9.  
  10. LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);
  11. final TextView textview = (TextView)findViewById(R.id.textview);
  12.  
  13.  
  14. MyImageView image = new MyImageView(this,textview);
  15. image.setImageResource(R.drawable.icon);
  16. image.setOnTouchListener(new OnTouchListener() {
  17. @Override
  18. public boolean onTouch(View v,MotionEvent event) {
  19. textview.setText("Event captured!");
  20. return false;
  21. }
  22. });
  23. ll.addView(image,48);
  24.  
  25. }
  26.  
  27. }

并提交MyImageView.java文件

  1. public class MyImageView extends ImageView {
  2.  
  3.  
  4. private TextView textview;
  5.  
  6. public MyImageView(Context context,TextView textview) {
  7. super(context);
  8. this.textview = textview;
  9. }
  10.  
  11.  
  12. }

但据我所知,2实现是相同的(实现事件监听器) – 我是否误解了什么?

解决方法

对于第一种情况,正确的方法是:
  1. MyImageView image = new MyImageView(this,textview);
  2. image.setImageResource(R.drawable.icon);
  3. image.setOnTouchListener(image);

或者在MyImageView类中调用setOnTouchListener(this).

猜你在找的Android相关文章