Android ImageView上的矢量可绘制模糊位图
我创建了一个扩展ImageView的自定义视图。当我设置视口较小的矢量可绘制对象时,我注意到图像模糊。 如果我只是使用ImageView,我看到的矢量图像是尖锐的,因为它被认为是 在我的自定义视图中,我覆盖了“setImageDrawable”,在这里我调用super,然后从drawable获取位图,以便稍后在Android ImageView上的矢量可绘制模糊位图,android,android-support-library,android-vectordrawable,android-support-design,Android,Android Support Library,Android Vectordrawable,Android Support Design,我创建了一个扩展ImageView的自定义视图。当我设置视口较小的矢量可绘制对象时,我注意到图像模糊。 如果我只是使用ImageView,我看到的矢量图像是尖锐的,因为它被认为是 在我的自定义视图中,我覆盖了“setImageDrawable”,在这里我调用super,然后从drawable获取位图,以便稍后在onDraw中绘制 下面是我如何转换为位图的 public Bitmap getBitmapFromDrawable(Drawable drawable) { Bitma
onDraw
中绘制
下面是我如何转换为位图的
public Bitmap getBitmapFromDrawable(Drawable drawable) {
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;
}
您需要获取视图宽度和高度,而不是可绘制的,并将其用作可绘制边界。我假设您的视图维度可能会随着时间的推移而改变,因此这不是一次性任务。我将在成员字段中存储可提取数据:
private Drawable drawable;
@Override
public void setImageDrawable(Drawable drawable) {
this.drawable = drawable;
this.drawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight());
// invalidate if needed
}
@Override
protected void onMeasure(int wms, int hms) {
super.onMeasure(wms, hms);
if (drawable != null) drawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight());
}
然后onDraw,只需绘制可绘制的图形。只需绘制可绘制的.getIntrinsicWidth()*5(任意数值),drawable.getIntrinsicHeight()*5并在第一个参数中传递DisplayMatrix,即可提高质量
public Bitmap getBitmapFromDrawable(Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap(context.getResources().getDisplayMetrics(), drawable.getIntrinsicWidth()*5,
drawable.getIntrinsicHeight()*5,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}