setImageLevel()LevelListDrawable一起使用是否有优势?
我查了一下,但只有几个例子。

我通常使用setImageResource()很多次,我想知道其他方法是否更好。

最佳答案

这取决于用例。如果您应该在ImageView上显示不同的图像,则使用LeveListDrawable将使您的代码更加解耦和更清晰。

假设在您的ImageView中,您应该表现出不同的情绪,例如facebook所具有的情绪,并且需要向用户显示他们选择了哪种反应。

android - setImageResource()和setImageLevel()之间的区别-LMLPHP

每次使用ifswitch语句,我们都可以显示正确的情绪图像。

private void setProperImageForEmotion() {
    int emotion = 1; // Let's imagine 1 is for like, ... , 6 is for angry
    int resId = getCorrectDrawableSource(emotion);
}

private int getCorrectDrawableSource(int emotion) {
    switch (emotion) {
        case 2:
            return R.drawable.love;
        case 3:
            return R.drawable.haha;
        case 4:
            return R.drawable.wow;
        case 5:
            return R.drawable.sad;
        case 6:
            return R.drawable.angry;
        default:
            return R.drawable.like;
    }
}


想象一下,将来您必须增加更多的情感,从而使您在switch语句中添加额外的可绘制对象。但是,使用LevelListDrawable将使您的代码更加整洁,并且不必在Java或Kotlin代码中添加无关的可绘制ID。因此,如果我们将上述代码更改为使用LevelListDrawable,则您的代码将如下所示:


您需要创建可绘制文件,该文件将包含对其他可绘制对象的引用,并且可以定义不同的级别:


<level-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:maxLevel="1" android:drawable="@drawable/like" />
  <item android:maxLevel="2" android:drawable="@drawable/love" />
  <item android:maxLevel="3" android:drawable="@drawable/haha" />
  <item android:maxLevel="4" android:drawable="@drawable/wow" />
  <item android:maxLevel="5" android:drawable="@drawable/sad" />
  <item android:maxLevel="6" android:drawable="@drawable/angry" />
 </level-list>



现在,在Java或Kotlin代码中,您可以设置适当的级别:


private void setProperImageForEmotion() {
    int emotion = 1; // Let's imagine 1 is for like, ... , 6 is for angry
    imageView.setImageLevel(emotion);
}


如您所见,它简化了代码。另外,您可以使用LevelListDrawableNotificationNotificationCompat中设置图标。

10-08 03:06