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

비트 맵 변환하고 방법이다. 시간이 지남에 따라 뷰 측정 기준이 변경 될 수 있다고 가정하므로 일회성 작업이 아닙니다. 드로어 블을 멤버 필드에 저장합니다 :

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를 드로잉하기 만하면됩니다.