我正在尝试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,然后具有带有ImageView的LinearLayout,并将ImageView的src设置为“@ drawable/logo2”,但未出现徽标...我在这里做错什么了吗?您实际上如何使用比例尺元素?

最佳答案

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

如果查看documentation,您会发现以下短语:“一个可绘制的控件,可根据其当前级别值更改另一个可绘制控件的大小。”而已。

我发现onBoundsChange()函数使用了奇怪的level变量后,情况变得很清楚。

对您来说,代码将是这样的:

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);
}

10-07 18:16