将setImageLevel()
与LevelListDrawable
一起使用是否有优势?
我查了一下,但只有几个例子。
我通常使用setImageResource()
很多次,我想知道其他方法是否更好。
最佳答案
这取决于用例。如果您应该在ImageView
上显示不同的图像,则使用LeveListDrawable
将使您的代码更加解耦和更清晰。
假设在您的ImageView
中,您应该表现出不同的情绪,例如facebook所具有的情绪,并且需要向用户显示他们选择了哪种反应。
每次使用if
或switch
语句,我们都可以显示正确的情绪图像。
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);
}
如您所见,它简化了代码。另外,您可以使用
LevelListDrawable
在Notification和NotificationCompat中设置图标。