J'ai trois fichiers. Le XML, la fonction de dessin et l'activité principale. J'en ai LinearLayout
dans mon fichier 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>
Voici la fonction de dessin:
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);
}
}
Et c'est l'activité principale:
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);
}
});
}
Le programme pouvait dessiner une bordure mais la taille ne correspondait pas au LinearLayout
. Et quand je clique à LinearLayout
nouveau sur, le programme plante.
Une autre chose, je veux dessiner deux cercles au centre de la LinearLayout
, mais comment pourrais-je déterminer les coordonnées du centre?
LinearLayout
Je ne sais pas pourquoi c'était le cas, mais quand je l'ai utilisé sur un, j'ai obtenu un remplissage solide de la couleur de la bordure, sauf si j'ai ajouté l'enfant suivant à l'shape
élément:<solid android:color="@android:color/transparent" />
<solid android:color="@color/lighter_gray" />
sinon j'ai un fond noirÉtendez LinearLayout / RelativeLayout et utilisez-le directement sur le XML
la source
onDraw()
méthode, créer vos objets dans uneinit()
méthode, appelée par le constructeur et les réutiliser dans laonDraw()
méthode. L'allocationonDraw()
(appelée 60 fois par seconde) entraîne des performances médiocres, une décharge de la batterie, etc.