触摸事件在ImageView上不起作用

时间:2013-08-21 05:26:59

标签: android imageview ontouchlistener

我正在尝试在图像上发生触摸事件时添加图像按钮。使用ImageView显示图像。但是当我触摸图像时没有任何反应。  附在此处的代码

Quick.java

 ImageView myImageView = (ImageView)findViewById(R.id.imgView);
   Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.india_map);
   myImageView.setImageBitmap(bitmap);

    myImageView.setOnTouchListener(new OnTouchListener()
 {

     @Override
     public boolean onTouch(View v, MotionEvent event)
     {
         ImageButton  imgbutton=(ImageButton)findViewById(R.id.imageButton1);
         Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.image5);  
         imgbutton.setImageBitmap(image); 
         imgbutton.setVisibility(View.VISIBLE);
                 return false;
     }   

});

activity_quick.xml

 <LinearLayout
            android:id="@+id/tab2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:padding="5dp" >

         <ImageView
             android:id="@+id/imgView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scaleType="fitXY"
            android:contentDescription="@string/desc"
            android:src="@drawable/india_map"/>
          <ImageButton
                android:id="@+id/imageButton1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/image5"
                android:contentDescription="@string/desc"
                android:visibility="invisible" />

                </LinearLayout>

请帮我解决这个问题

4 个答案:

答案 0 :(得分:1)

使用FrameLayout将视图放在另一个视图上。

尝试以下方法:

<FrameLayout
            android:id="@+id/tab2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:padding="5dp" >

         <ImageView
             android:id="@+id/imgView"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:scaleType="fitXY"
             android:contentDescription="@string/desc"
             android:src="@drawable/india_map"/>

          <ImageButton
             android:id="@+id/imageButton1"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:src="@drawable/image5"
             android:contentDescription="@string/desc"
             android:visibility="gone" />

 </FrameLayout>

无需在java代码中设置Image位图。你已经用xml指定了它们。

答案 1 :(得分:0)

 myImageView.setOnTouchListener(new OnTouchListener()
 {

     @Override
     public boolean onTouch(View v, MotionEvent event)
     {
         ImageButton  imgbutton=(ImageButton)findViewById(R.id.imageButton1);
         Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.image5);  
imgbutton.setImageBitmap(null);        
 imgbutton.setImageBitmap(image); 
         imgbutton.setVisibility(View.VISIBLE);
                 return false;
     }   

});

首先,您将图像位图设置为null,然后设置其他位图。

答案 2 :(得分:0)

将您的imageview设置为可点击。在xml中使用android:clickable =“true”

答案 3 :(得分:0)

使用TouchListener有什么特别的理由吗? (例如,用于处理捏或轻扫手势)

如果你认为只是'处理点击图像事件',我认为它更好&amp;易于使用OnClickListener而不是OnTouchListener。例如......

    View iv = findViewById(R.id.imgView));
    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ImageButton  imgbutton=(ImageButton)findViewById(R.id.imageButton1);
            Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.image5);  
            imgbutton.setImageBitmap(image); 
            imgbutton.setVisibility(View.VISIBLE);
    });

另外一件事你可能会考虑在主UI线程中解码位图并不是一个好主意,那么如何考虑使用另一个线程或AsyncTask来处理位图。