3

Je veux changer la forme de mon bouton MAIS JE VEUX UTILISER la méthode onDaw et le bouton EXTENSION classe. Donc ce que je viens de faire pour le début est:étendre le bouton android en utilisant onDraw

 <view class = "com.example.button.MainActivity$MyButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 

et

public static class MyButton extends Button { 


    public MyButton(Context context) { 
     super(context); 

    } 

    public MyButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 

    } 

    public MyButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

      Paint paint = new Paint(); 
      paint.setColor(Color.BLUE); 
      paint.setStrokeWidth(10); 
      paint.setStyle(Style.FILL); 
      int width = getWidth(); 
      int height = getHeight(); 
      canvas.drawCircle(width/2, height/2, height/3, paint); 

     } 
} 

mais je reçois un cercle bleu sur une vue bouton rectangulaire.

Je veux voir juste le cercle bleu comme une forme de bouton et je reçois le tour du rectangle. Toute aide?

+0

Tu oublies l'appel super.onDraw (toile). – Neil

+0

Oui, mais toujours le même problème. . . – mmlooloo

+0

Je pourrais être à des miles de là mais essayez de mettre l'arrière-plan en xml à transparent. – hypd09

Répondre

1

Définir arrière-plan à transparent en XML (juste comme hypd09 dit) et remplacer onTouchListener afin que les clics ne fonctionnent que si vous cliquez sur votre cercle bleu. SetOnTouchListener permet de contrôler si la position du clic était dans le cercle bleu. Vous pouvez obtenir la position tactile comme this.

Vous pouvez même permettre le réglage de la onClickListener manière suivante (ajouter à votre classe MyButton):

@Override 
public void setOnClickListener(final OnClickListener onClickListener) { 
    MyButton.this.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event){ 
      if (isWithinCircle(event)) 
      { 
       onClickListener.onClick(v); 
      } 
     } 
    }); 
} 
+0

Bon mais si ma forme est un peu complexe, que dois-je faire pour trouver la réponse, par exemple quelque chose comme le pentagone. trouver une bonne règle pour vérifier qu'un point est entouré ou non est difficile. – mmlooloo

+0

Je pense que si vous ne pouvez pas définir votre forme plus précisément (par exemple en indiquant quel type de fonctions construisent les côtés de votre forme et en les comparant avec les coordonnées de l'événement tactile), Android ne peut vous donner que le rectangle forme. –

+0

Ma forme est construite par des chemins. Je marche sur les frontières de ma forme. – mmlooloo