我有两种颜色的 ImageView 源。我想触摸一种颜色并显示一条消息。我已经完成了以下操作,但有些事情进展不顺利,因为也许我使用了 getDrawingCache 方法,它在显示正确消息时有延迟..
@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;
}
});
还有我的触摸事件
@Override
public boolean onTouch(View v, MotionEvent event)
{
switch (v.getId())
{
case R.id.imageView:
Log.d("Tag", "X,Y : " + event.getX() + "," + event.getY());
int x = (int) event.getX();
int y = (int) event.getY();
int pixel = bitmap.getPixel(x,y);
if(pixel == Color.parseColor("#94e3f9"))
{
Toast.makeText(MainActivity.this, "Blue Color", Toast.LENGTH_SHORT).show();
}
if(pixel == Color.parseColor("#f0c828"))
{
Toast.makeText(MainActivity.this, "Yellow Color", Toast.LENGTH_SHORT).show();
}
break;
}
return true;
}
除了上述之外,我不确定是否需要 ViewTreeObserver