我有一个以调色板为背景的布局。
在布局中,我添加了一个较小的图像作为拇指(使用@dimen
调整大小以使其更小,非常小,像十字准线一样),当用户拖动上面的布局时,它应该移动: / p>
如何将布局的背景用作位图,以便我可以使用以下代码:
f = (FrameLayout) findViewById(R.id.fl);
f.setOnTouchListener(flt);
iv = (ImageView) findViewById(R.id.iv);
View.OnTouchListener flt = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
//int pixel = resizedbitmap.getPixel((int)x,(int) y); //the background of the layout goes here...
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x<0) {
x = x + 10;
iv.setX(x);
iv.setY(y);
}
if (x>f.getWidth()) {
x = x - 10;
iv.setX(x);
iv.setY(y);
}
else {
iv.setX(x);
iv.setY(y);
}
// Write your code to perform an action on down
break;
case MotionEvent.ACTION_MOVE:
if (x<0) {
x = x + 10;
iv.setX(x);
iv.setY(y);
inRed = Color.red(pixel);
inBlue = Color.blue(pixel);
inGreen = Color.green(pixel);
Log.d("Colors","R:" +inRed +" G:" +inGreen+" B:" + inBlue);
}
if (x>f.getWidth()) {
x = x - 10;
iv.setX(x);
iv.setY(y);
}
else {
iv.setX(x);
iv.setY(y);
}
// Write your code to perform an action on contineus touch move
break;
case MotionEvent.ACTION_UP:
// Write your code to perform an action on touch up
break;
}
// TODO Auto-generated method stub
return true;
}
};
XML是:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/palette2"
android:id="@+id/fl" >
<ImageView
android:id="@+id/iv"
android:layout_width="10dp"
android:layout_height="10dp"
android:src="@drawable/esquare" />
</FrameLayout>
我要做的是创建一个颜色选择器,以便当用户在布局中拖动时,向用户显示R G B值。任何人都可以帮我完成代码吗?
答案 0 :(得分:1)
获取像您注释掉的那一行的像素。使用BitMap的getPixel(x,y)。你需要为此保留一个位图。
getPixel()返回一个颜色int,您可以通过选中http://developer.android.com/reference/android/graphics/Bitmap.html看到 实际上,文档错误地建议getPixel返回一个android.graphics.Color对象。它不是。它返回一个颜色int argb。
通过这样的调用获取颜色int,c的组件,您可以通过选中http://developer.android.com/reference/android/graphics/Color.html
看到int alpha = Bitmap.alpha(c);
int red = Bitmap.red(c);
或者你可以自己做位操作:
int alpha = c >>> 24;
int red = (c >>> 16) & 0xFF;
这会回答你的问题吗?