为大图像设置更高的可绘制分辨率

时间:2016-03-29 14:46:14

标签: android xml imageview scale android-drawable

我的项目中有许多等级的PNG图标列表(mdpi为32px,hdpi为48px,xhdpi为64px,xxhdpi为96px,由Android Studio自动创建),我得到一个Activity,我要显示这个图标有两种不同的尺寸,有些比其他尺寸大。

问题是较大的(我真正定义布局宽度和高度的那些)使用了drawable的低分辨率版本而不是更好的版本。

这是我的XML代码:

<!-- small icon -->
<ImageView 
    android:layout_weight="1"
    android:layout_width="1dp"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_icon_like" />
<!-- ... -->
<!-- big icon -->
<ImageView 
    android:layout_weight="1"
    android:src="@drawable/ic_icon_like"
    android:layout_width="90dp"
    android:layout_height="90dp" />

结果如下:

Screenshot of the two ImageViews from the emulator

至于比较,这里是Drawable的PNG的xxhdpi版本,明显优于我得到的大版本。

xxhdpi version of the Drawable

我是Android的新手,所以我想我做错了什么,但我无法弄清楚是什么。我是否应该为每个分辨率定义更高分辨率我应该为两个显示的版本提供ic_icon_likeic_icon_like_big吗?

1 个答案:

答案 0 :(得分:1)

好吧,我终于继续使用了webfont,因为我得到了SVG格式的所有图标。

尺寸和颜色就像这样简单。

所以我在项目中添加了一个/app/assets/fonts/webfont.ttf文件,从IconView创建了一个TextView heriting:

public class IconView extends TextView {
    public IconView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // here I trully use a cache, but remove it for a full example
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/webfont.ttf"));
        // the following allows me to use a default color if no 'textColor' attribute is provided
        int[] set = {android.R.attr.textColor};
        TypedArray attributes = context.obtainStyledAttributes(attrs, set);
        ColorDrawable color = (ColorDrawable) attributes.getDrawable(0);
        attributes.recycle();    
        if (color == null) {
            this.setTextColor(MY_DEFAULT_COLOR);
        }
    }
}

另外,我在我的webfont中为每个图标添加strings.xml中的常量,如下:

<string name="icon_like">&#xe635;</string>

在我的XML活动和片段中使用了整个:

<com.mySociety.myProject.IconView android:text="@string/icon_like" />