0

Im trying to get the color of the touched pixel and set this color as a backgroundcolor to a FrameLayout, but it doesnt work. why?

Here is my code:

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            float xPos = event.getX();
            float yPos = event.getY();

            ImageView iview = (ImageView)v;
            Bitmap bitmap = ((BitmapDrawable)iview.getDrawable()).getBitmap();
            int color = bitmap.getPixel(Math.round(xPos), Math.round(yPos));

            myFrameLayout.setBackgroundColor(Integer.parseInt(Integer.toString(color), 16));

            return true;
        }
4

1 回答 1

0

错误在于解析颜色。

直接使用 int 颜色应该可以满足您的需要。

    int color = bitmap.getPixel(Math.round(xPos), Math.round(yPos));
    myFrameLayout.setBackgroundColor(color);

但是,如果你真的想对其进行解析和重构,请使用 Color.argb(int, int, int, int) 方法来执行此操作,其中 int 参数是 0x00-0xFF 值,用于透明度、红色、绿色、蓝色分量颜色。

    int color = bitmap.getPixel(Math.round(xPos), Math.round(yPos));
    myFrameLayout.setBackgroundColor(Color.argb(
         (color & (255 << 24)) >> 24, // take the top 8 bits
         (color & (255 << 16)) >> 16, // take the second 8 bits
         (color & (255 << 8 )) >> 8   // take the third 8 bits
          color & 255)         // take the last 8 bits
    );

希望这可以帮助。

于 2012-11-02T00:33:58.917 回答