如何使用布局的背景作为位图将X和Y转换为RGB值

时间:2014-02-05 01:54:00

标签: android android-layout bitmap android-framelayout

我有一个以调色板为背景的布局。

enter image description here

在布局中,我添加了一个较小的图像作为拇指(使用@dimen调整大小以使其更小,非常小,像十字准线一样),当用户拖动上面的布局时,它应该移动: / p>

enter image description here

如何将布局的背景用作位图,以便我可以使用以下代码:

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值。任何人都可以帮我完成代码吗?

1 个答案:

答案 0 :(得分:1)

  1. 获取像您注释掉的那一行的像素。使用BitMap的getPixel(x,y)。你需要为此保留一个位图。

  2. getPixel()返回一个颜色int,您可以通过选中http://developer.android.com/reference/android/graphics/Bitmap.html看到 实际上,文档错误地建议getPixel返回一个android.graphics.Color对象。它不是。它返回一个颜色int argb。

  3. 通过这样的调用获取颜色int,c的组件,您可以通过选中http://developer.android.com/reference/android/graphics/Color.html

    看到

    int alpha = Bitmap.alpha(c);

    int red = Bitmap.red(c);

  4. 或者你可以自己做位操作:

    int alpha = c >>> 24;
    int red = (c >>> 16) & 0xFF;
    

    这会回答你的问题吗?