skw*_*ear 6 android bitmap getpixel ontouchlistener android-vectordrawable
我还在努力解决几天前我遇到的问题,但我还没有找到解决方案.但是,我一步一步到达那里.现在我遇到了另一个障碍.
我试图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;
}
};
}
Run Code Online (Sandbox Code Playgroud)
但是我的应用程序一碰到它就会遇到致命的错误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)
Run Code Online (Sandbox Code Playgroud)
和第38行是这一个,
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
Run Code Online (Sandbox Code Playgroud)
我有点跟着这个.我究竟做错了什么?是因为它是一个VectorDrawable.我能做些什么来获得Color?你可以看到我也试过BitmapFactory施展Drawable.它是否也是API级别的问题,VectorDrawable因为它像API 21一样被添加?
Jab*_*iyo 16
首先,你可以不投VectorDrawable给BitmapDrawable.他们没有亲子关系.它们都是类的直接子Drawable类.
现在,要从drawable获取位图,您需要Bitmap从可绘制的元数据中创建一个.
在单独的方法中可能是这样的,
try {
Bitmap bitmap;
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
} catch (OutOfMemoryError e) {
// Handle the error
return null;
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
| 归档时间: |
|
| 查看次数: |
13174 次 |
| 最近记录: |