我正在试用安卓 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/