2

我创建了扩展ImageView的自定义视图。当我设置视口较小的矢量绘图时,我注意到图像模糊。 如果我只是使用ImageView,我会看到矢量图像很清晰,因为它应该是。ImageView上的Vectordrawable模糊位图

在我的自定义视图中,我重写了“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; 
} 

回答

1

你需要得到视图的宽度和高度,而不是绘制,并使用这些作为绘制边界。我认为您的视图维度可能随时间而改变,所以这不是一次性任务。我会将drawable存储在成员字段中:

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。