android - ImageView 上的 Vectordrawable 模糊位图

标签 android android-support-library android-vectordrawable android-support-design

我创建了一个扩展 ImageView 的自定义 View 。当我设置视口(viewport)较小的矢量可绘制对象时,我注意到图像很模糊。 如果我只使用 ImageView,我会看到矢量图像像预期的那样清晰。

在我的自定义 View 中,我覆盖了“setImageDrawable”,我调用了 super,然后从可绘制对象中获取位图,稍后在 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;
}

最佳答案

您需要获取 View 的宽度和高度,而不是可绘制对象,并将它们用作可绘制对象的边界。我假设您的 View 尺寸可能会随着时间而改变,因此这不是一次性任务。我会将可绘制对象存储在成员字段中:

   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,直接绘制drawable。

关于android - ImageView 上的 Vectordrawable 模糊位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43414311/

相关文章:

android - 在 React Native 中将静态图像转换为 Base64

android - 无法在 DayNight 主题中动态切换模式

android - 检查 DrawableRes 是否为 VectorDrawable

android - 警报仅在我处于设置它的 Activity 中时触发

android - 如何在android上从计算机读取文本文件

android - VerticalGridView 水平滚动

android - 为 android 2.3 及更高版本实现 Action Bar 支持 v7 库时应用程序崩溃

Android无效颜色状态列表标签渐变

android - 如何使用 minSdkVersion 21 从矢量可绘制启动器图标生成 png?

java - 给 RxJava Observable 一些东西以从另一个方法发出