我仍在尝试解决我几天前遇到的问题,但我仍然没有找到解决方案。但是,我正在一步一步地到达那里。现在我遇到了另一个障碍。
我正在尝试Bitmap.getpixel(int x, int y)
返回Color
用户使用OnTouchListener
. 饼图是一种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 21 一样添加后,它是否也是 API 级别的问题?