SPG
SPG

Reputation: 6197

Android: draw borders on LinearLayout

I am new to Android. Now I have a problem about drawing borders on LinearLayout. I draw borders by following codes.

   public class Borders{
    int w;
    int h;
    public Borders(int x, int y){
        w = x;
        h = y;
    }

    public void drawBorderInImg(Canvas canvas){
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStrokeWidth(10);
        paint.setColor(Color.BLACK);
        canvas.drawLine(0, 0, w, 0, paint);
        canvas.drawLine(w, 0, w, h, paint);
        canvas.drawLine(w, h, 0, h, paint);
        canvas.drawLine(0, h, 0, 0, paint);
    }
}

I create a boolean value and use onclickListener() to control it. By default, the value is false, so there is no border on the screen.

   @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);
            // operate.refresh(ShapeData.figureList1);
            Borders borders = new Borders(img01.getWidth(), img01.getHeight());
            if(img01DrawOrNot){
                borders.drawBorderInImg(canvas);
            }

And then I do

img01.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(img01DrawOrNot){
                    img01DrawOrNot = false;
                } else{
                    img01DrawOrNot = true;
                }
            }
        });

I set android:clickable=true in xml. It actually works. But, I need to postInvalidate() it. In fact, I can't refresh it because it contains some random shapes, when I do postInvalidate(), all views will change. How can it change automatically? So when I click, it will appear and when I click again, it will disappear. Could someone help me? Cheers!

Upvotes: 2

Views: 7655

Answers (1)

Aerrow
Aerrow

Reputation: 12134

if you like, try this.

(create this layout in your drawable folder) layout_border.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <stroke android:width="2dp" android:height="2dp"
                android:color="#FF0000" />
            <solid android:color="#000000" />
            <padding android:left="1dp" android:top="1dp" android:right="1dp"
                android:bottom="1dp" />

            <corners android:radius="1dp" android:bottomRightRadius="5dp"
                android:bottomLeftRadius="0dp" android:topLeftRadius="5dp"
                android:topRightRadius="0dp" />
        </shape>
    </item>

</layer-list>

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="#ffffff"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    <LinearLayout android:layout_gravity="center"
    android:layout_width="200dp" android:layout_height="200dp" android:background="@drawable/layout_border" />
</LinearLayout>

Upvotes: 7

Related Questions