Android scaledrawable似乎不起作用

时间:2011-03-31 23:19:18

标签: android

我正在尝试安卓ScaleDrawable

但它似乎不起作用......我在文档示例中创建了xml,并且我在drawable文件夹中有一个logo.png

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />

我将这个logo2.xml保存在drawable文件夹中然后我有一个带有ImageView的LinearLayout并将ImageView的src设置为“@ drawable / logo2”但徽标没有出现......我在做什么错了吗?你如何实际使用比例元素?

4 个答案:

答案 0 :(得分:29)

就在今天,我遇到了同样的问题。 ScaleDrawable似乎不起作用。经过一番调查后,我找到了解决方案:

如果查看documentation,您可以找到以下短语:“一个Drawable,根据当前的级别值更改另一个Drawable的大小。”就是这样。

在我发现onBoundsChange()函数使用奇怪的级别变量后,它变得清晰了。

对你而言,代码将是这样的:

Resources res = getResources();
ScaleDrawable sd = (ScaleDrawable) res.getDrawable(R.drawable.logo2);
Drawable d = sd.getDrawable();

d.setLevel(1);

ImageView iv = new ImageView(this);
iv.setImageDrawable(sd);
iv.setAdjustViewBounds(true); 
iv.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

setContentView(iv);

更新:我认为draw()函数中存在问题。因为在初始化之后,级别变量是0:

public void draw(Canvas canvas) {
    if (mScaleState.mDrawable.getLevel() != 0)
        mScaleState.mDrawable.draw(canvas);
}

更新:也许这段代码可以帮助您:

private void useScaledImage() {
    Resources res = getResources();
    BitmapDrawable bd = (BitmapDrawable)res.getDrawable(R.drawable.sun);
    Bitmap b = Bitmap.createScaledBitmap(bd.getBitmap(),
                         (int) (bd.getIntrinsicHeight() * 0.7),
                         (int) (bd.getIntrinsicWidth() * 0.7),
                         false);

    LinearLayout l = new LinearLayout(this);
    ImageView iv = new ImageView(this);

    iv.setImageDrawable(new BitmapDrawable(b));
    iv.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    l.addView(iv);

    setContentView(l);
}

答案 1 :(得分:7)

使用insert drawable而不是scale drawable

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/logo"
    android:insetTop="2dp"
    android:insetLeft="2dp"  
    android:insetRight="2dp"
    android:insetBottom="2dp"
    >

答案 2 :(得分:1)

ScaleDrawable不仅允许您缩放drawable,还允许您使用ScaleDrawable本身的setLevel控制缩放。 但ScaleDrawable并没有改变drawable的固有宽度和高度 正如@ m039指出的那样,ScaleDrawable源实际上做了一件奇怪的事情:当原始drawable的级别设置为0时,scaleDrawable本身不会被绘制。

要使比例生效,您必须执行以下操作:

ScaleDrawable scaleDrawable = (ScaleDrawable) imageView.getDrawable();
scaleDrawable.setLevel(10000);
or 
scaleDrawable.setLevel(5000);

答案 3 :(得分:1)

您需要在xml中添加级别。

android:level="1"