我仍在尝试解决自几天前以来一直存在的问题,但我仍未找到解决方案。不过,我正在逐步接近目标。现在我又遇到了另一个障碍。
我正在尝试使用OnTouchListener
获取用户触摸的位置的Color
,并让Bitmap.getpixel(int x, int y)
返回它。这个饼图是一个VectorDrawable
资源,名为vectordrawable.xml
。我暂时不需要处理像素数据,只需要测试一下。因此,我创建了一个TextView
,用于显示触摸点的Color
。
public class MainActivity extends AppCompatActivity {
ImageView imageView;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
textView = (TextView) findViewById(R.id.textView);
imageView.setOnTouchListener(imageViewOnTouchListener);
}
View.OnTouchListener imageViewOnTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
Drawable drawable = ((ImageView)view).getDrawable();
//Bitmap bitmap = BitmapFactory.decodeResource(imageView.getResources(),R.drawable.vectordrawable);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
int x = (int)event.getX();
int y = (int)event.getY();
int pixel = bitmap.getPixel(x,y);
textView.setText("touched color: " + "#" + Integer.toHexString(pixel));
return true;
}
};
}
但是当我点击
ImageView
时,我的应用程序遇到了致命错误,显示"很抱歉,..."的消息并退出。在堆栈跟踪中,我发现了这个问题。java.lang.ClassCastException: android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
at com.skwear.colorthesaurus.MainActivity$1.onTouch(MainActivity.java:38)
第38行是这一行,
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
我有点跟随这个。我做错了什么?是因为它是一个VectorDrawable
吗?我该怎么做才能得到Color
?你可以看到,我还尝试使用BitmapFactory
来转换Drawable
。这也可能是VectorDrawable
的API级别的问题,因为它是在API 21之后添加的吗?