2010-03-10 3 views
1

J'utilise Android 2.1 et Eclipse.Comment puis-je remplacer le canevas dans ma vue?

J'ai défini un LinearLayout avec deux composants qui ont des dimensions: 250 x 250.

LinearLayout ll = new LinearLayout(this); 
ll.setOrientation(LinearLayout.VERTICAL); 

LinearLayout.LayoutParams llp = 
    new llp.LayoutParams(250, 250); 

meter1View = new MeterView(this, "Meter 1"); 
ll.addView(meter1View, llp); 
meter2View = new MeterView(this, "Meter 2"); 
ll.addView(meter2View, llp); 
ScrollView scrollView = new ScrollView(this); 
scrollView.addView(ll); 
setContentView(scrollView); 

Jusqu'à présent, si bon. Je vois deux compoments verticaux sur mon écran d'émulation.

Cependant, dans ma classe View mètre, la taille de la toile dans onDraw est la taille de mon écran de l'émulateur, qui est de 480 par 800.

@Override 
protected void onDraw(Canvas canvas) { 
    int w = canvas.getWidth(); 
    int h = canvas.getHeight(); 
    Log.i(TAG, " onDraw, w: " + w + ", h: " + h); 
} 

Je voudrais une taille de la toile à 250 x 250, afin que je puisse passer cette toile à des routines de dessin. À l'heure actuelle, mes routines de dessin dessinent en dehors du bitmap 250 x 250 défini par mon LinearLayout.

Je me rends compte que je peux faire fonctionner ma routine de dessin de toile en traduisant la toile, mais ce serait plus propre si je pouvais remplacer temporairement la toile originale par une nouvelle.

Je comprends que je peux définir ma propre toile par:

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(b); 

Comment puis-je remplacer la toile qui est créé par la classe View avec ma nouvelle toile? Toute aide sera grandement appréciée.

Charles

Répondre

1

vous devez utiliser la largeur et la hauteur de la vue, et non pas la toile, tous deux disponibles via getWidth() et getHeight(). Puis passez ces dimensions à votre routine de dessin.

1

Ne remplacez pas le canevas, utilisez simplement le clip rect à la place.

Questions connexes