我正在尝试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%" />
Run Code Online (Sandbox Code Playgroud)
我将这个logo2.xml保存在drawable文件夹中然后我有一个带有ImageView的LinearLayout并将ImageView的src设置为"@ drawable/logo2"但徽标没有出现......我在这里做错了吗?你如何实际使用scale元素?
m03*_*039 29
就在今天,我遇到了同样的问题.ScaleDrawable似乎不起作用.经过一番调查后,我找到了解决方案:
如果查看文档,可以找到以下短语:"一个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);
Run Code Online (Sandbox Code Playgroud)
更新:我认为draw()函数中的问题.因为初始化后级别变量为0:
public void draw(Canvas canvas) {
if (mScaleState.mDrawable.getLevel() != 0)
mScaleState.mDrawable.draw(canvas);
}
Run Code Online (Sandbox Code Playgroud)
更新:也许这个代码可以帮助你:
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);
}
Run Code Online (Sandbox Code Playgroud)
小智 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"
>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17861 次 |
| 最近记录: |