0

如何在不拉伸图像的情况下将 LinearLayout 的背景设置为特定图像(从 Internet 获取)?

基本上我有以下代码将 aa Bitmap 转换为 BitmapDrawable,这反过来又允许我以编程方式设置 LinearLayout 的背景:

BitmapDrawable myBackground = new BitmapDrawable(myBitmap);
myLinearLayout.setBackgroundDrawable(myBackground);

问题是,图像拉伸以匹配 LinearLayout 的高度和宽度;它不会像我在 XML 布局中将背景设置为可绘制那样水平和垂直居中。如何使用从 Internet 检索的位图实现此目的?

4

2 回答 2

0

只需在您的linearLayout后面使用一个imageView(使用另一个viewGroup,如relativeLayout来实现)并相应地设置imageView的scaleType......(http://etcodehome.blogspot.co.at/2011/05/android-imageview- scaletype-samples.html )

于 2013-08-21T14:23:46.693 回答
-1

发生这种情况是因为 backgroundDrawable 无权更改父布局的布局参数。

您有 2 个选项:

1 -

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="center" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>
</FrameLayout>

2 - 用你的双手 setSize 的 LinearLayout

BitmapDrawable myBackground = new BitmapDrawable(myBitmap);
LayoutParams lp = myLinearLayout.getLayoutParams();
lp.width = myBitmap.getWidth();
lp.height = myBitmap.getHeight();
myLinearLayout.setlayoutParams(lp)
myLinearLayout.setBackgroundDrawable(myBackground);

你应该重写 BitmapDrawable 的 onDraw(Canvas c) 方法,在中心绘制位图现在看起来像:http ://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android /4.3_r2.1/android/graphics/drawable/BitmapDrawable.java#BitmapDrawable.draw%28android.graphics.Canvas%29

于 2013-08-21T15:11:56.317 回答