![](/img/trans.png)
[英]Ontouch event of OnTouchListener gets called twice in android
[英]Android: onTouch() never gets called?
我正在使用UI事件處理,但是發現了一些我無法從Android Dev中找到的解釋:我有一個ImageView和一個TextView,每當我觸摸ImageView時,TextView都會顯示一條消息。 但是以下代碼不起作用:
public class ShowSomething extends Activity {
private LinearLayout ll;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);
final TextView textview = (TextView)findViewById(R.id.textview);
MyImageView image = new MyImageView(this, textview);
image.setImageResource(R.drawable.icon);
ll.addView(image, 48, 48);
}
}
還有MyImageView.java
public class MyImageView extends ImageView implements OnTouchListener{
private TextView textview;
public MyImageView(Context context,TextView textview) {
super(context);
this.textview = textview;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
textview.setText("Event captured !");
return true;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Holder"
/>
</LinearLayout>
但是,當我像這樣在MyImageView上附加OnTouchListener時,它確實起作用:File ShowSomething.java
public class ShowSomething extends Activity {
private LinearLayout ll;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);
final TextView textview = (TextView)findViewById(R.id.textview);
MyImageView image = new MyImageView(this,textview);
image.setImageResource(R.drawable.icon);
image.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textview.setText("Event captured!");
return false;
}
});
ll.addView(image, 48, 48);
}
}
並文件MyImageView.java
public class MyImageView extends ImageView {
private TextView textview;
public MyImageView(Context context,TextView textview) {
super(context);
this.textview = textview;
}
}
但是據我所知,這兩個實現是相同的(實現一個事件監聽器)-我會誤會什么嗎?
您的第一個實現忘記設置偵聽器...在MyImageView
構造函數中調用setOnTouchListener(this)
,它應該可以工作。
對於第一種情況,正確的方法是:
MyImageView image = new MyImageView(this, textview);
image.setImageResource(R.drawable.icon);
image.setOnTouchListener(image);
或在MyImageView類中調用setOnTouchListener(this)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.