LayerDrawable绘制的可绘制对象大小相同吗?

4

你好,我正在尝试绘制两个不同大小的图标,其中一个图标只是背景边框类型,另一个图标则是符号。

当我绘制两个图标时,符号图标会被放大以适应与背景图标相同的大小。

以下是我的代码:

  drawableSelectedIcons[0] = r.getDrawable(R.drawable.background);

    drawableSelectedIcons[1] = r.getDrawable((R.drawable.symbol);

    LayerDrawable layerDrawableSelected = new LayerDrawable(drawableSelectedIcons);

你尝试过更改可绘制对象的比例值吗? - joao2fast4u
你如何以编程的方式实现这个?背景图片大约是200x200,而符号图片只有120x120,为什么我还需要手动缩放/调整大小呢? - Jono
你只有两层吗? - joao2fast4u
为什么不将较大的图像设置为背景,将较小的图像设置为ImageView中的src呢? - joao2fast4u
是的,我只有两个层。 - Jono
2个回答

4

R.drawable.symbol 是一个位图吗?那么它会被作为 BitmapDrawable 加载。它有重力属性,根据重力属性位图会在 Drawable 的边界内定位。尝试将重力设置为 Gravity.CENTER。

您可以按照以下方式实现:

BitmapDrawable bd = (BitmapDrawable) r.getDrawable((R.drawable.symbol); // be careful with this cast
db.setGravity(Gravity.CENTER)

drawableSelectedIcons[1] = bd;

1
考虑到您的布局中只有该图像,这应该已经足够满足您的需求:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/background"
        android:scaleType="center"
        android:src="@drawable/symbol" />

</LinearLayout>

编辑:如果要将其动态添加到布局中,请使用以下内容:

ImageView imageView = new ImageView(this);
    imageView.setBackgroundResource(R.drawable.background);
    imageView.setImageResource(R.drawable.symbol);
    imageView.setScaleType(ScaleType.CENTER);
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.CENTER;
    addContentView(imageView, params);

需要动态渲染。 - Jono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接