Mam trzy pliki. XML, funkcja rysowania i główne działanie. Mam trochę LinearLayout
w moim pliku 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>
To jest funkcja rysowania:
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);
}
}
I to jest główne działanie:
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);
}
});
}
Program mógł narysować ramkę, ale rozmiar nie pasował LinearLayout
. A kiedy kliknę LinearLayout
ponownie, program ulega awarii.
Kolejna rzecz, chcę narysować dwa koła na środku LinearLayout
, ale jak mogę ustalić współrzędne środkowe?
LinearLayout
, uzyskałem pełne wypełnienie z koloru obramowania, chyba że dodałem doshape
elementu następujące dziecko :<solid android:color="@android:color/transparent" />
<solid android:color="@color/lighter_gray" />
przeciwnym razie mam czarne tłoRozszerz LinearLayout / RelativeLayout i użyj go bezpośrednio w pliku XML
źródło
onDraw()
metodzie, tworzyć obiekty winit()
metodzie wywoływanej przez konstruktora i ponownie wykorzystywać je wonDraw()
metodzie. PrzydzielanieonDraw()
(zwane 60 razy na sekundę) prowadzi do słabej wydajności, wyczerpania baterii itp.