Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ImageView上的矢量可绘制模糊位图_Android_Android Support Library_Android Vectordrawable_Android Support Design - Fatal编程技术网

Android ImageView上的矢量可绘制模糊位图

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

我创建了一个扩展ImageView的自定义视图。当我设置视口较小的矢量可绘制对象时,我注意到图像模糊。 如果我只是使用ImageView,我看到的矢量图像是尖锐的,因为它被认为是

在我的自定义视图中,我覆盖了“setImageDrawable”,在这里我调用super,然后从drawable获取位图,以便稍后在
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;
}