如何在运行时设置线性布局的背景+圆角形状

时间:2014-05-14 05:19:31

标签: android android-layout

您好我正在尝试在LinearLayout上设置背景图片,首先我需要使用shape标记对其进行舍入,并调用setBackgroundResource使其圆整但现在我应该如何在同一LinearLayout

的运行时设置任何drawable

layout_rounded.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="3dip" android:color="#B1BCBE" />
    <corners android:radius="10dip"/>
    <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>

我做了这个

linearLayout.setBackgroundResource(R.drawable.layout_rounded);

这里要设置LinearLayout的背景,然后我必须调用setBackgroundDrawable但是在调用它之后,它会设置drawable但是它再次取消设置LinearLayout的形状。 / p>

我没有res中的drawable,我从URL获取的背景然后尝试设置

你能看看如何实现这个目标吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

在android中使用 Shape 来制作圆角

创建名为roundcorner.xml

的xml文件
<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#33DDFF" />
        <corners android:radius="4dp" />
    </shape>

ImageButton添加此属性android:background="@drawable/roundcorner"

<ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/imageButton"
                android:layout_marginTop="57dp"
                android:src="@drawable/friends"
                android:background="@drawable/roundcorner"
                android:padding="1dp"
                android:layout_alignParentTop="true"
                android:layout_toLeftOf="@+id/imageButton2"
                android:layout_marginRight="62dp" />

使用图片视图集android:src = "your image"android:background= "your shape "android:clickable="true"

答案 1 :(得分:0)

试试这种方式。希望这会对你有所帮助。

请注意,我在此处使用FrameLayout而不是LinearLayout,以达到您的要求。

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
</FrameLayout>

<强> MainActivity.java

public class MainActivity extends Activity {

    FrameLayout frame;
    protected void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        setContentView(R.layout.activity_main);
        frame = (FrameLayout) findViewById(R.id.frame);
        frame.setBackgroundResource(R.drawable.layout_round); // set your rounded background here
        frame.setForeground(getResources().getDrawable(R.drawable.ic_launcher)); // set your background image here
    }   
}

答案 2 :(得分:0)

最后,我通过简单地将位图制作为圆形来完成此操作。现在没有必要将LinearLayout形状赋予圆角,因为我设置为LinearLayout的位图是圆形的,使LinearLayout形状变为圆形。

import android.content.res.Resources;
import android.graphics.Paint;
import android.graphics.BitmapShader;
import android.graphics.RectF;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;

public class RoundedCornersDrawable extends BitmapDrawable {

  private final BitmapShader bitmapShader;
  private final Paint p;
  private final RectF rect;
  private final float borderRadius;

  public RoundedCornersDrawable(final Resources resources, final Bitmap bitmap) {
    super(resources, bitmap);
    bitmapShader = new BitmapShader(getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    final Bitmap b = getBitmap();
    p = getPaint();
    p.setAntiAlias(true);
    p.setShader(bitmapShader);
    final int w = b.getWidth();
    final int h = b.getHeight();
    rect = new RectF(0, 0, w, h);
    borderRadius = 0.15f * Math.min(w, h);
  }

  @Override
  public void draw(final Canvas canvas) {
    canvas.drawRoundRect(rect, borderRadius, borderRadius, p);
  }
}

这对我有帮助并且为我正在寻找的东西工作。