2012-01-31 2 views
2

Я новичок в Android. Теперь у меня проблема с рисованием границ LinearLayout. Я рисую границы по следующим кодам.Android: нарисовать границы на LinearLayout

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); 
    } 
} 

Я создаю логическое значение и использую onclickListener() для его управления. По умолчанию значение равно false, поэтому на экране нет границы.

@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); 
      } 

А потом я

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

Я установил андроид: кликабельным = в XML истинный. Это действительно работает. Но мне нужно postInvalidate() это. На самом деле, я не могу обновить его, потому что он содержит некоторые случайные формы, когда я делаю postInvalidate(), все представления будут меняться. Как это может измениться автоматически? Поэтому, когда я нажимаю, он появится, и когда я снова нажму, он исчезнет. Может кто-нибудь мне помочь? Ура!

+0

Ну, это не так много, ответ на ваш вопрос но альтернативная возможность. Вместо этого вы можете использовать патч Nine с только границами (без заполнения). http://developer.android.com/guide/developing/tools/draw9patch.html – Knossos

ответ

7

если хотите, попробуйте этот.

(создать этот макет в вашей вытяжке папке) 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> 
+0

thx, но как я могу его контролировать? Я хочу щелкнуть по нему и переключить его – nich

+0

работает отлично ... – Joyson