<!-- -->
public class MyDrawableView extends View { Context thisContext; public MyDrawableView(Context context, AtsortingbuteSet attr) { super(context); thisContext = context; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); final Paint paint = new Paint(); paint.setColor(Color.BLUE); paint.setTextSize(12); canvas.drawText("Blah blah", 0, 100, paint); } }
public class MyActivity extends Activity { // Your member variable declaration here // Called when the activity is first created. @Override public void onCreate(Bundle savedInstanceState) { // Your code here super.onCreate(savedInstanceState); setContentView(R.layout.xmllayout); LinearLayout svll = (LinearLayout) findViewById(R.id.svLL); svll.setLayoutParams(new LinearLayout.LayoutParams(300, 300)); } }
Je mets un point d’arrêt, mais le point d’arrêt n’est jamais touché dans la méthode onDraw()
, qu’est-ce qui ne va pas?
Ajoutez setWillNotDraw(false)
dans le constructeur MyDrawableView. La réponse originale est ici .
Votre vue a une hauteur de 0. Vous définissez votre View sur height=wrap_content
, mais vous ne remplacez pas onMeasure()
pour indiquer la taille de votre View à la boîte à outils de l’interface utilisateur.
Vous devez @Override
la OnMeasure(int, int)
pour spécifier la taille de votre vue en appelant setMeasuredDimension(int,int)
.
Si vous ne le faites pas, la méthode par défaut définira votre vue pour avoir la width=0 height=0
. Et donc n’essayez même pas d’appeler onDraw
du tout.
La méthode OnMeasure
appelle setMeasuredDimension(int,int)
qui indique la taille de votre vue.
(Vous devez donc obtenir la taille de l’écran Android sur la méthode OnMeasure
et appeler setMeasuredDimension
conséquence).
Il suffit de faire en layout_width
que layout_width
et layout_height
de la vue personnalisée fixent un correctif au moment initial au lieu de wrap_content
ou fill_parent
. Cela a fonctionné pour moi.
Bien que je sois nouveau dans Android, je crois toujours que le problème est dû à
setContentView(R.layout.xmllayout);
Au lieu de "R.layout.xmllayout"
, passez l’object MyDrawableView
(en utilisant findViewById
) et vérifiez. Je n’ai pas essayé, mais j’espère que ça va marcher.
Vous devez utiliser la méthode du constructeur invalide () pour obtenir l’appel appelé onDraw.
Après avoir défini la largeur de vue personnalisée, vous devez définir la largeur de défilement.
FMChart = (HKFMDrawChart)findViewById(R.id.fm_chart); FMChart.setWidth(xxxx); float scrollViewWidth = FMChart.getScrellViewWidth(); FMChart.setLayoutParams(new LinearLayout.LayoutParams( (int) (scrollViewWidth + HKApplication.getScreenWidth() / 2), LinearLayout.LayoutParams.WRAP_CONTENT)); FMChart.postInvalidate(); // onDraw();
Probablement
setMinimumHeight(width); setMinimumWidth(height);
in constructeur ne sont pas définis ou onMeasure()
n’est pas onMeasure()
.