如何使用Android中的Touch Event从像素中获取ImageView的颜色

时间:2016-05-23 14:08:55

标签: android android-imageview android-bitmap android-touch-event

我有两种颜色的ImageView源。我想触摸一种颜色并显示一条消息。我已经做了以下但是事情进展不顺利因为我可能使用方法getDrawingCache它有延迟显示正确的消息..

TextField

我的触摸事件

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ImageView img = (ImageView) findViewById(R.id.imageView);
    img.setOnTouchListener(this);

    ViewTreeObserver vto = img.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {
            finalHeight = img.getMeasuredHeight();
            finalWidth = img.getMeasuredWidth();

            r = (finalHeight*0.2973)*0.8109;
            centerx = finalWidth/2;
            centery = finalHeight;
            Log.e("hilength","Height: " + finalHeight + " Width: " + finalWidth);

            img.buildDrawingCache();
            bitmap = img.getDrawingCache();

            return true;
        }
    });

除上述内容外,我不确定是否需要ViewTreeObserver

1 个答案:

答案 0 :(得分:2)

如果它是ImageView,您只需从BitmapDrawable的位图中获取像素值,但您可能需要将事件X / Y投影到ImageView的帐户中scaleType。如果位图与视图的大小不完全相同,则需要重新计算在某个位置的单击。对fitCenter的最简单的预测将是:

float ratioX = event.getX() / view.getWidth(); // downscale to 0..1
int bitmapX = (int)(ratioX * bitmap.getWidth()); // upscale to size of bitmap

另外,如果只是最后选择两种颜色的问题,你可以用两个独立的onClick听众创建两个独立的视图,以便于处理。