Android: le dessin d'une toile à vue
Je suis en train de dessiner une toile qui contient un cercle à un point de vue qui a été défini précédemment via findViewById() comme ceci
View v = findViewById(R.id.view1);
Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
c.drawCircle(v.getMeasuredWidth() / 2, v.getMeasuredHeight() / 2, v.getMeasuredWidth() / 4, paint);
v.draw(c);
mais il n'y a pas de cercle tracé à la vue
L'ensemble de mon activité:
package com.burrlieexample.test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class InstructionsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("DEBUG", "InstruciotnActivity");
setContentView(R.layout.activity_instructions);
Button okay = (Button) findViewById(R.id.okButton);
okay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
finish();
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
//TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
Log.d("DEBUG", "onFocusChanged");
//im doing this stuff in onWindowfocusChanged because getWidth returns 0 in onCreate
View v = findViewById(R.id.view1);
Log.d("DEBUG", "" + v.getMeasuredWidth() + ", " + v.getMeasuredHeight());
Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
c.drawCircle(v.getMeasuredWidth() / 2, v.getMeasuredHeight() / 2, v.getMeasuredWidth() / 4, paint);
v.draw(c);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
et la Vue est dans ma mise en page fichier xml comme ceci
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#D0F3FF"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.burrlieexample.test.InstructionsActivity" >
<Button
android:id="@+id/okButton"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="52dp"
android:background="#00455F"
android:hapticFeedbackEnabled="true"
android:text="Ok!" />
<View
android:id="@+id/view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/okButton"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
Ainsi, lorsque l'Activité commence les seules choses que je vois sont sur le bouton et le fond de ma relative disposition
Vous devez vous connecter pour publier un commentaire.
faire simple :
Dessiner un cercle de Vue
Dessin à vue est une meilleure option si votre INTERFACE utilisateur ne nécessite pas de changements dynamiques de l'application.
Ceci peut être réalisé simplement en étendant la classe de la Vue et de définir un onDraw() la méthode de rappel. À l'intérieur de votre point de Vue de la composante de onDraw(), utiliser le Canevas donné à vous tous et toutes pour votre dessin à l'aide de diverses Toile.tirage...() méthodes (Ex: de la toile.drawCircle(x /2, y /2, rayon, peinture);). onDraw() est une méthode de callback appelée lorsque l'affichage est initialement établi.
super.onDraw()
nécessaire, 2) ne pas attribuer tous les Objets deonDraw
méthode, 3) pourquoi cette étrange habitude d'utiliserColor.parseColor("#CD5C5C")
?Vous nourris d'une image bitmap dans le garbage collector. Vous n'a jamais attiré quoi que ce soit sur la vue. Par conséquent, rien n'avait été prélevé sur la vue.