为什么X的值不会一直到布局的边缘

palette2 drawable用作背景:

在此处输入图像描述

esquare drawable(使用@dimenresize并用作拇指):

在此处输入图像描述

XML:

      

Java的:

 llColors = (RelativeLayout) findViewById(R.id.rlColorSpect); llColors.setOnTouchListener(llTouch); bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.palette2); llColors.setBackground(getResources().getDrawable(R.drawable.palette2)); w = bitmap.getWidth(); h = bitmap.getHeight(); Log.i("PALETTE WIDTH", "width" +w); Log.i("PALETTE HEIGHT", "height" +h); observer = llColors.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { width = llColors.getWidth(); height = llColors.getHeight(); Log.i("LAYOUT WIDTH", "width" +width); Log.i("LAYOUT HEIGHT", "height" +height); //in here, place the code that requires you to know the dimensions. //Place your code here } }); View.OnTouchListener llTouch = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { x = (int)event.getX(); y = (int)event.getY(); if (x<0) { ivTouch.setX(0); ivTouch.setY(y); x=0; Toast.makeText(getApplicationContext(), "x=0", 2000).show(); } if (ybitmap.getWidth()) { ivTouch.setX(bitmap.getWidth()); x=bitmap.getWidth()-1; Toast.makeText(getApplicationContext(), "x=bitmap.maxwidth(}", 2000).show(); } if (y>bitmap.getHeight()) { ivTouch.setY(bitmap.getHeight()); y=bitmap.getHeight()-20; Toast.makeText(getApplicationContext(), "y=bitmap.maxheight(}", 2000).show(); } if (x>0 && x0 || y<bitmap.getHeight()) { 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); inRed = Color.red(pixel); inBlue = Color.blue(pixel); inGreen = Color.green(pixel); Log.d("Colors","R:" +inRed +" G:" +inGreen+" B:" + inBlue); dispHVal(inRed, inGreen, inBlue); hexToRGB(); break; } case MotionEvent.ACTION_MOVE:{ Log.i("COORDINATES","Touch coordinates : x" + String.valueOf(x) + "y" + String.valueOf(y)); ivTouch.setX(x); ivTouch.setY(y); inRed = Color.red(pixel); inBlue = Color.blue(pixel); inGreen = Color.green(pixel); Log.d("Colors","R:" +inRed +" G:" +inGreen+" B:" + inBlue); dispHVal(inRed, inGreen, inBlue); hexToRGB(); break; } } } return true; } }; 

LogCat显示以下内容:

 01-31 22:55:38.729: I/LAYOUT WIDTH(23021): width660 01-31 22:55:38.729: I/LAYOUT HEIGHT(23021): height470 01-31 22:55:38.744: I/COORDINATES(23021): Touch coordinates : x579y89 01-31 22:55:38.744: D/Colors(23021): R:226 G:226 B:226 01-31 22:55:38.760: I/LAYOUT WIDTH(23021): width660 01-31 22:55:38.760: I/LAYOUT HEIGHT(23021): height470 

有谁知道为什么我只能拖到579(x只能达到579),而布局宽度是660,我该如何解决?

编辑 :我要做的是允许用户拖动RelativeLayout中的任何位置和用户拖动的位置,拇指随手指移动但保持在布局内。 我希望能够将背景检索为位图,以便我可以转换为RGB值。 我该如何做到这一点?

你能按照预期到达图像的左边缘吗? 顶部和底部怎么样?

你试过其他任何Android设备吗?

请注意,您的手指比像素大得多,因此触摸屏需要将其环绕。 一般来说,它应该报告手指的中心,但根据质量,它可能没有做好。 特别是,它可能无法在活动区域​​外获取有关您手指的任何信息(如果您的手指太多在屏幕之外,则不会报告任何触摸)。

您可以使用Touch Test之类的应用来查看设备的行为方式。 首先检查一下你是否可以实现这一目标。 如果不这样做,则问题不在您的代码中,而在于设备。