Android scaledrawable 似乎不起作用

标签 android

我正在试用安卓 ScaleDrawable

但它似乎不起作用...我按照文档示例创建了 xml,并且在可绘制文件夹中有一个 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”,但 Logo 没有出现......我在做什么这里错了吗?你是如何实际使用比例元素的?

最佳答案

就在今天,我遇到了同样的问题。 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()函数的问题。因为在初始化之后 level 变量为 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);
}

关于Android scaledrawable 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507539/

相关文章:

android - TextInputLayout setError 方法在 24.2.0 中抛出 ClassCastException

android - 如何在我的 Android 应用程序中使用 epublib jar

android - 更改应用程序的启动 Activity

android - Android 自定义 View 上的文本输入

android - 为什么 ADT Ubuntu 无法识别我的设备?

android - 如何在ListView中的多个项目删除中更改背景颜色

android - 从 Google Play 商店安装时 Delphi XE6 应用程序崩溃

Android Activity 返回堆栈

javascript - 在phonegap中上传文件后重定向

android - 如何知道 Android 何时在 Genymotion VM 中准备就绪?