我正在尝试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);
}