LinerLayout с круглой границей

поэтому вопрос Как добавить границу вокруг линейного макета кроме как внизу? частично отвечает на мой вопрос, но я не могу понять, как сделать углы круглыми..


person Jacob Anthony Tonna    schedule 28.05.2013    source источник
comment
Вы пробовали это: stackoverflow.com/q/6514114/693752?   -  person Snicolas    schedule 28.05.2013


Ответы (3)


  1. Создайте файл XML с именем round_border в папке макета.

  2. Теперь поместите этот код в свой файл XML:

    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="4dp" android:color="#FF00FF00" /> 
    <solid android:color="#ffffff" /> 
    <padding android:left="7dp" android:top="7dp" 
            android:right="7dp" android:bottom="7dp" /> 
    <corners android:radius="10dp" /> 
    

  3. Now use this file as a background of your LinearLayout like this :

    <LinearLayout android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="20dip"
    android:background="@drawable/round_border">
    
person Vipul Purohit    schedule 28.05.2013
comment
только одна проблема, в моем приложении все равно есть фоновое изображение, чтобы просто позволить видеть границу? - person Jacob Anthony Tonna; 28.05.2013
comment
@JacobAnthonyTonna вы ищете изображение с закругленными углами? - person Raghunandan; 28.05.2013
comment
@JacobAnthonyTonna, я не думаю, что вы оба можете установить линейную компоновку. Я думаю, вы ищете изображение с закругленными углами - person Raghunandan; 28.05.2013
comment
Для прозрачного фона вы можете использовать ‹solid android:color=#00ffffff /› - person Vipul Purohit; 28.05.2013
comment
подождите, есть одна огромная проблема, я не могу иметь 2 предмета, чтобы один не двигался и не перекрывал другой... - person Jacob Anthony Tonna; 29.05.2013

В вашем линейном макете

   android:background="@drawable/bkg"

Определите приведенный ниже xml в папке с возможностью рисования.

bkg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> 
<solid android:color="#10EB0A"/>    
<stroke android:width="3dp"
    android:color="#0FECFF" /> 
<padding android:left="5dp"
     android:top="5dp"
     android:right="5dp"
     android:bottom="5dp"/> 
<corners android:bottomRightRadius="7dp"
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp"
     android:topRightRadius="7dp"/> 
</shape>   
person Raghunandan    schedule 28.05.2013

это пользовательский Drawable, который вы можете использовать:

class RoundedImageDrawable extends Drawable {

    private Bitmap mBitmap;
    private Matrix mMatrix;
    private Path mPath;
    private float mRx;
    private float mRy;

    public RoundedImageDrawable(Resources res , int id, float rx, float ry) {
        mBitmap = BitmapFactory.decodeResource(res, id);
        mMatrix = new Matrix();
        mPath = new Path();
        mRx = rx;
        mRy = ry;
    }

    @Override
    protected void onBoundsChange(Rect bounds) {
        RectF src = new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
        RectF dst = new RectF(bounds);
        mMatrix.setRectToRect(src, dst, Matrix.ScaleToFit.FILL);
        mPath.addRoundRect(dst, mRx, mRy, Direction.CW);
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.save();
        canvas.clipPath(mPath);
        canvas.drawBitmap(mBitmap, mMatrix, null);
        canvas.restore();
    }

    @Override
    public void setAlpha(int alpha) {
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }
}

и используйте его в своей деятельности:

LinearLayout ll = findViewById(R.id.layout);
Drawable d = new RoundedImageDrawable(getResources(), R.drawable.background, 20, 20);
ll.setBackgroundDrawable(d);
person pskink    schedule 28.05.2013