点击图片中不规则图形提示选中不同区域


如图所示,当点击不同区域做出不同提示
首先制作背景图,然后将不同区域的图片单独截取下来,截取的楼层图必须和背景相同大,保证当所有图片重叠是是一样完整的图片
背景图:

楼层图:


 1 如图所示,当点击不同区域做出不同提示
 2 首先制作背景图,然后将不同区域的图片单独截取下来,截取的楼层图必须和背景相同大,保证当所有图片重叠是是一样完整的图片
 3 背景图:
 4 
 5 楼层图:
 6 
 7 
 8 [java] view plaincopy
 9 package com.bitcare.view;  
10   
11 import android.content.Context;  
12 import android.graphics.Bitmap;  
13 import android.graphics.Canvas;  
14 import android.util.AttributeSet;  
15 import android.view.MotionEvent;  
16 import android.view.View;  
17   
18 public class NavMapView extends View {  
19   
20     private Bitmap[] mBitmaps;  
21     private OnClickBitmapListener clickBitmapListener;  
22   
23     public NavMapView(Context context) {  
24         super(context);  
25     }  
26   
27     public NavMapView(Context context, AttributeSet attrs) {  
28         super(context, attrs);  
29     }  
30   
31     /** 
32      * 设置图片 
33      * @author yubin 
34      * @date 2013-10-12 
35      */  
36     public final void setBitmaps(Bitmap[] bitmap) {  
37         this.mBitmaps = bitmap;  
38         invalidate();  
39     }  
40   
41     @Override  
42     protected void onDraw(Canvas canvas) {  
43         super.onDraw(canvas);  
44         if (mBitmaps != null) {  
45             for (int i = 0; i < mBitmaps.length; i++) {  
46                 canvas.drawBitmap(mBitmaps[i], 0, 0, null);  
47             }  
48         }  
49     }  
50   
51     @Override  
52     public boolean onTouchEvent(MotionEvent event) {  
53         if (event.getAction() == MotionEvent.ACTION_DOWN) {  
54             which(event.getX(), event.getY());  
55         }  
56         return true;  
57     }  
58   
59     public void which(float x, float y) {  
60         if (mBitmaps != null) {  
61             for (int i = 0; i < mBitmaps.length; i++) {  
62                 // 判断坐标点不超过图片得宽高  
63                 if ((int) x > mBitmaps[0].getWidth() || (int) y > mBitmaps[0].getHeight()) {  
64                     clickBitmapListener.ClickBitmap(-1);  
65                     break;  
66                 }  
67                 Bitmap mBitmap = mBitmaps[i];  
68                 // 判断坐标点是否是在图片得透明区域  
69                 if (mBitmap.getPixel((int) x, (int) y) != 0) {  
70                     clickBitmapListener.ClickBitmap(i);  
71                     break;  
72                 }  
73             }  
74         }  
75     }  
76   
77     public final void setOnClickBitmapListener(OnClickBitmapListener listener) {  
78         this.clickBitmapListener = listener;  
79     };  
80   
81     public static interface OnClickBitmapListener {  
82         /** 
83          * @param index -1表示超出范围 
84          * @author yubin 
85          * @date 2013-10-12 
86          */  
87         void ClickBitmap(int index);  
88     }  
89 }  

来自:http://blog.csdn.net/q445697127/article/details/12653127

原文地址:https://www.cnblogs.com/code4app/p/4495232.html