API 21+上的模糊图像:使用带有srcCompat的VectorDrawables的AppCompat v23.2.0

时间:2016-03-15 16:12:57

标签: android imageview android-support-library android-vectordrawable

我在API 21+上遇到图像显示问题,但在较低的设备和API 22 +上一切正常。我正在使用Gradle Plugin 1.5,所以我的build.gradle看起来像这样:

// Gradle Plugin 1.5  
 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  

以XML格式显示图片:

<ImageView
   android:id="@+id/landing_img_slide"
   android:layout_width="225dp"
   android:layout_height="225dp"
   android:layout_centerHorizontal="true"
   android:scaleType="centerCrop" />

Java代码:

ImageView iconView = (ImageView) itemView.findViewById(R.id.landing_img_slide);
iconView.setImageResource(R.drawable.laptopscreen);

屏幕截图下方显示ImageView,VectorDrawable可与Pre-lollipop和Marshmallow配合使用,但在Android 5.0.1中显示模糊图像

Android 4.4.4 Android 4.4.4 Screenshot

Android 5.0.1

Android 5.0.1 Screenshot

Android 6.0.1

Android 6.0.1 Screenshot

1 个答案:

答案 0 :(得分:3)

这与ImageView中的scaleType有关,当涉及到VectorDrawables时,它会在这些不同的API级别上执行不一致的事情。

有一个scaleType在缩放时似乎始终给出清晰的图像:android:scaleType="fitXY"但是在使用它时你必须确保ImageView具有与Vector Drawable相同的纵横比(例如,如果你使用fitXY)使用方形VectorDrawable和矩形ImageView,它将拉伸图像。

或者,您可以通过设置

来更改VectorDrawable本身的大小
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="225dp"
android:height="225dp"
.../>

通过这样做,ImageView中不需要缩放。