2017-05-26 41 views
0

假設我在我的android imageView中有這種圖像。現在每個國家都由它自己的地區組成。如何在地圖上的每個分區設置onClick事件?

如何設置onClick基於地圖中每個狀態的事件?我的預期輸出的例子是,如果我點擊區域Alor Setar,然後Log.i("map","Alor Setar")對於這個需求是否有更好的想法?

幫幫我,謝謝!

enter image description here


我曾嘗試:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    int x = (int)event.getX(); 
    int y = (int)event.getY(); 
    ImageView imageView = (ImageView) findViewById(R.id.imageView); 
    Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 

    int pixel = bitmap.getPixel(x,y); 
    int red = Color.red(pixel); 
    int blue = Color.blue(pixel); 
    int green = Color.green(pixel); 
    Log.d(TAG,"Color = "+red); 
    Log.d(TAG,"Color = "+green); 
    Log.d(TAG,"Color = "+blue); 
    return false; 
} 

但錯誤:

05-26 10:45:10.463 3289-3289/com.example.flow.detail.master.masterdetailflow E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 
05-26 10:45:10.473 3289-3289/com.example.flow.detail.master.masterdetailflow E/MessageQueue-JNI: java.lang.IllegalArgumentException: y must be < bitmap.height() 
                            at android.graphics.Bitmap.checkPixelAccess(Bitmap.java:1403) 
                            at android.graphics.Bitmap.getPixel(Bitmap.java:1352) 
                            at com.example.flow.detail.master.masterdetailflow.JsonActivity.onTouchEvent(JsonActivity.java:103) 
                            at android.app.Activity.dispatchTouchEvent(Activity.java:2837) 
                            at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71) 
                            at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2414) 
                            at android.view.View.dispatchPointerEvent(View.java:9543) 
                            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4248) 
                            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4114) 
                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3805) 
                            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3862) 
                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5951) 
                            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5925) 
                            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5875) 
                            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6054) 
                            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
                            at android.os.MessageQueue.nativePollOnce(Native Method) 
                            at android.os.MessageQueue.next(MessageQueue.java:323) 
                            at android.os.Looper.loop(Looper.java:135) 
                            at android.app.ActivityThread.main(ActivityThread.java:5468) 
                            at java.lang.reflect.Method.invoke(Native Method) 
                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
05-26 10:45:10.474 3289-3289/com.example.flow.detail.master.masterdetailflow E/AndroidRuntime: FATAL EXCEPTION: main 
                           Process: com.example.flow.detail.master.masterdetailflow, PID: 3289 
                           java.lang.IllegalArgumentException: y must be < bitmap.height() 
                            at android.graphics.Bitmap.checkPixelAccess(Bitmap.java:1403) 
                            at android.graphics.Bitmap.getPixel(Bitmap.java:1352) 
                            at com.example.flow.detail.master.masterdetailflow.JsonActivity.onTouchEvent(JsonActivity.java:103) 
                            at android.app.Activity.dispatchTouchEvent(Activity.java:2837) 
                            at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71) 
                            at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2414) 
                            at android.view.View.dispatchPointerEvent(View.java:9543) 
                            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4248) 
                            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4114) 
                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3805) 
                            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3862) 
                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5951) 
                            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5925) 
                            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5875) 
                            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6054) 
                            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
                            at android.os.MessageQueue.nativePollOnce(Native Method) 
                            at android.os.MessageQueue.next(MessageQueue.java:323) 
                            at android.os.Looper.loop(Looper.java:135) 
                            at android.app.ActivityThread.main(ActivityThread.java:5468) 
                            at java.lang.reflect.Method.invoke(Native Method) 
                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

回答

0
You can get the RGB of color. 
//根據座標獲取 
ImageView imageView = ((ImageView)v); 
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); 
int pixel = bitmap.getPixel(x,y); 
//獲取顏色 
int redValue = Color.red(pixel); 
int blueValue = Color.blue(pixel); 
int greenValue = Color.green(pixel); 
+0

你能解釋一下,我是你們的新局。 – Nere

+0

如何在'bitmap.getPixel(x,y);'中定義?因爲'x'和'y'還沒有定義。 – Nere

+0

http://blog.csdn.net/zhanggang740/article/details/50129297 –

相關問題