Android 多个ImageView图片层叠透明区域点击事件穿透


经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件。

效果图:

一、先上图片,这2张图片尺寸是一样的,放到drawable目录下:

图1:transparent.png

 

图2:transparent2.png

二、上布局文件,test.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:Android="http://schemas.android.com/apk/res/android"  
  3.    android:layout_width="fill_parent"  
  4.    android:layout_height="fill_parent"  
  5.    android:orientation="vertical"  
  6.    android:gravity="center"  
  7.    android:id="@+id/mainLayout">  
  8.      
  9.     <ImageView android:id="@+id/ImageView01"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:src="@drawable/transparent"/>  
  13.       
  14.     <ImageView android:id="@+id/ImageView02"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:src="@drawable/transparent2"/>      
  18.           
  19. </FrameLayout>  

三、上Activity文件,MainActivity.java

  1. package org.shuxiang.test;  
  2.   
  3. import android.app.Activity;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.drawable.BitmapDrawable;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8. import android.view.MotionEvent;  
  9. import android.view.View;  
  10. import android.view.Window;  
  11. import android.view.View.OnClickListener;  
  12. import android.view.View.OnTouchListener;  
  13. import android.widget.ImageView;  
  14.   
  15. public class MainActivity extends Activity  
  16. {  
  17.     private ImageView iv1;  
  18.     private ImageView iv2;  
  19.     private Bitmap bitmap1, bitmap2;  
  20.     private boolean iv1Transparent = false;  
  21.     private boolean iv2Transparent = false;  
  22.   
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  27.         setContentView(R.layout.test);  
  28.   
  29.         iv1 = (ImageView) findViewById(R.id.ImageView01);  
  30.         iv2 = (ImageView) findViewById(R.id.ImageView02);  
  31.         bitmap1 = ((BitmapDrawable) (iv1.getDrawable())).getBitmap();  
  32.         bitmap2 = ((BitmapDrawable) (iv2.getDrawable())).getBitmap();  
  33.           
  34.         iv1.setOnClickListener(new OnClickListener(){  
  35.             @Override  
  36.             public void onClick(View v) {  
  37.                 // TODO Auto-generated method stub   
  38.                 if(iv1Transparent)  
  39.                 {  
  40.                     Log.i("test""图1透明区域");  
  41.                 }  
  42.                 else  
  43.                 {  
  44.                     Log.i("test""图1点击");                    
  45.                 }  
  46.             }  
  47.               
  48.         });  
  49.           
  50.         iv1.setOnTouchListener(new OnTouchListener()  
  51.         {  
  52.             @Override  
  53.             public boolean onTouch(View arg0, MotionEvent arg1)   
  54.             {  
  55.                 // TODO Auto-generated method stub   
  56.                 if(bitmap1.getPixel((int)(arg1.getX()),((int)arg1.getY()))==0)  
  57.                 {  
  58.                     Log.i("test""图1透明区域");  
  59.                     iv1Transparent = true;  //透明区域设置true                       
  60.                 }  
  61.                 else  
  62.                 {  
  63.                     Log.i("test""图1实体区域");  
  64.                     iv1Transparent = false;  
  65.                 }  
  66.                 return false;  
  67.             }             
  68.         });  
  69.           
  70.         iv2.setOnClickListener(new OnClickListener()  
  71.         {  
  72.             @Override  
  73.             public void onClick(View v) {  
  74.                 // TODO Auto-generated method stub   
  75.                 if(iv2Transparent)  
  76.                 {  
  77.                     Log.i("test""图2透明区域");  
  78.                 }  
  79.                 else  
  80.                 {  
  81.                     Log.i("test""图2点击");                    
  82.                 }  
  83.             }  
  84.               
  85.         });  
  86.           
  87.         iv2.setOnTouchListener(new OnTouchListener()  
  88.         {  
  89.             @Override  
  90.             public boolean onTouch(View v, MotionEvent event) {  
  91.                 // TODO Auto-generated method stub   
  92.                 if(bitmap2.getPixel((int)(event.getX()),((int)event.getY()))==0)  
  93.                 {  
  94.                     Log.i("test""图2透明区域");  
  95.                     iv2Transparent = true;  //透明区域设置true   
  96.                     iv1.dispatchTouchEvent(event);  
  97.                 }  
  98.                 else  
  99.                 {  
  100.                     Log.i("test""图2实体区域");  
  101.                     iv2Transparent = false;  
  102.                 }  
  103.                 return false;  
  104.             }  
  105.         });  
  106.     }  
  107. }  

相关内容