如果用户向左或向右按​​压太多,则应用为FC

我有以下XML:

     

我的部分Java代码:

 View.OnTouchListener llTouch = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int x = (int)event.getX(); int y = (int)event.getY(); int action = event.getAction(); int pixel = bitmap.getPixel((int)x,(int) y); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { Log.i("COORDINATES","Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y)); ivTouch.setX(x); ivTouch.setY(y); int redValue = Color.red(pixel); int blueValue = Color.blue(pixel); int greenValue = Color.green(pixel); Log.d("Colors","R:" +redValue +" G:" +greenValue+" B:" + blueValue); sbRed.setProgress(redValue); sbGreen.setProgress(greenValue); sbBlue.setProgress(blueValue); dispHVal(); break; } case MotionEvent.ACTION_MOVE:{ Log.i("COORDINATES","Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y)); ivTouch.setX(x); ivTouch.setY(y); int redValue = Color.red(pixel); int blueValue = Color.blue(pixel); int greenValue = Color.green(pixel); Log.d("Colors","R:" +redValue +" G:" +greenValue+" B:" + blueValue); sbRed.setProgress(redValue); sbGreen.setProgress(greenValue); sbBlue.setProgress(blueValue); dispHVal(); break; } } return true; } }; 

我遇到的问题。

  1. 按下布局以获取其某些部分的坐标(如果我一直按下/向左或向右拖动),我的应用程序FC。 我在下面添加了LogCat:

01-25 01:13:21.059:E / AndroidRuntime(13345):FATAL EXCEPTION:main 01-25 01:13:21.059:E / AndroidRuntime(13345):java.lang.IllegalArgumentException:x必须是<bitmap.width( )01-25 01:13:21.059:E / AndroidRuntime(13345):在android.graphics.Bitmap.checkPixelAccess(Bitmap.java:1155)01-25 01:13:21.059:E / AndroidRuntime(13345):at android .graphics.Bitmap.getPixel(Bitmap.java:1107)01-25 01:13:21.059:E / AndroidRuntime(13345):at com.test.testing.MainActivity $ 1.onTouch(MainActivity.java:98)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.view.View.dispatchTouchEvent(View.java:7241)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.view.ViewGroup .dispatchTransformedTouchEvent(ViewGroup.java:2168)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)01-25 01:13:21.059:E / AndroidRuntime(13345):at andro id.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)01-25 01: 13:21.059:E / AndroidRuntime(13345):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2174)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)01-25 01:13:21.059:E / AndroidRuntime (13345):在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875) 01-25 01:13:21.059:E / AndroidRuntime(13345):at com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)01-25 01:13:21.059:E / AndroidRuntime(13345):在com.android.internal.policy.impl.PhoneWindow。 superDispatchTouchEvent(PhoneWindow.java:1405)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.app.Activity.dispatchTouchEvent(Activity.java:2410)01-25 01:13:21.059:E / AndroidRuntime(13345):at com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:1901)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.View .dispatchPointerEvent(View.java:7426)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java: 4292)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.jav a:4363)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)01-25 01:13:21.059:E / AndroidRuntime(13345) :at android.os.MessageQueue.nativePollOnce(Native Method)01-25 01:13:21.059:E / AndroidRuntime(13345):at android.os.MessageQueue.next(MessageQueue.java:125)01-25 01:13 :21.059:E / AndroidRuntime(13345):在android.os.Looper.loop(Looper.java:124)01-25 01:13:21.059:E / AndroidRuntime(13345):在android.app.ActivityThread.main( ActivityThread.java:5195)01-25 01:13:21.059:E / AndroidRuntime(13345):at java.lang.reflect.Method.invokeNative(Native Method)01-25 01:13:21.059:E / AndroidRuntime(13345) ):at java.lang.reflect.Method.invoke(Method.java:511)01-25 01:13:21.059:E / AndroidRuntime(13345):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run( ZygoteInit.java:795)01-25 01:13:21.059:E / AndroidRuntime(13345):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)01-25 01:13:21.059: E / AndroidRunt ime(13345):at dalvik.system.NativeStart.main(Native Method)

我想让用户能够一直拖到左边,顶部,右边和底部。 如何修改上面的代码来实现呢? 谢谢!!!

  1. 在访问位图之前将x和y日志记录移动到以查看返回的值。

  2. 根据堆栈跟踪,不要使用超出位图尺寸的值x和y调用getPixel。