歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 多個ImageView圖片層疊透明區域點擊事件穿透

Android 多個ImageView圖片層疊透明區域點擊事件穿透

日期:2017/3/1 10:12:21   编辑:Linux編程

經常用到多個透明圖片層疊,但又需要獲取不同圖片的點擊事件,本文實現圖片透明區域穿透點擊事件。

效果圖:

一、先上圖片,這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. <ImageView android:id="@+id/ImageView01"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:src="@drawable/transparent"/>
  12. <ImageView android:id="@+id/ImageView02"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:src="@drawable/transparent2"/>
  16. </FrameLayout>

三、上Activity文件,MainActivity.java

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