0
假設我在我的android imageView中有這種圖像。現在每個國家都由它自己的地區組成。如何在地圖上的每個分區設置onClick事件?
如何設置onClick
基於地圖中每個狀態的事件?我的預期輸出的例子是,如果我點擊區域Alor Setar
,然後Log.i("map","Alor Setar")
對於這個需求是否有更好的想法?
幫幫我,謝謝!
我曾嘗試:
@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)
你能解釋一下,我是你們的新局。 – Nere
如何在'bitmap.getPixel(x,y);'中定義?因爲'x'和'y'還沒有定義。 – Nere
http://blog.csdn.net/zhanggang740/article/details/50129297 –