Eu tenho três arquivos. O XML, a função de desenho e a Atividade principal. Eu tenho alguns LinearLayout
no meu arquivo XML.
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#ef3"
android:id="@+id/img01"/>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#E8A2B4"
android:id="@+id/img02"/>
</LinearLayout>
Esta é a função de desenho:
public class getBorder extends TextView {
public getBorder(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(android.graphics.Color.RED);
canvas.drawLine(0, 0, this.getWidth() - 1, 0, paint);
canvas.drawLine(0, 0, 0, this.getHeight() - 1, paint);
canvas.drawLine(this.getWidth() - 1, 0, this.getWidth() - 1,
this.getHeight() - 1, paint);
canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1,
this.getHeight() - 1, paint);
}
}
E esta é a principal atividade:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final getBorder getBorder = new getBorder(this);
final LinearLayout img01 = (LinearLayout) findViewById(R.id.img01);
img01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
getBorder.setWidth(100);
getBorder.setHeight(100);
img01.addView(getBorder);
}
});
}
O programa pode desenhar borda, mas o tamanho não se ajusta ao LinearLayout
. E quando clico no botão LinearLayout
novamente, o programa trava.
Outra coisa, eu quero desenhar dois círculos no centro do LinearLayout
, mas como eu poderia descobrir as coordenadas do centro?
LinearLayout
shape
<solid android:color="@android:color/transparent" />
<solid android:color="@color/lighter_gray" />
caso contrário eu tinha um fundo pretoEstenda o LinearLayout / RelativeLayout e use-o diretamente no XML
fonte
onDraw()
método, crie seus objetos em uminit()
método, chamado pelo construtor e reutilize-os noonDraw()
método. AlocaronDraw()
(chamado 60 vezes por segundo) leva a um desempenho ruim, consumo de bateria, etc.