我有两种颜色的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
答案 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
听众创建两个独立的视图,以便于处理。