2017-05-02 3 views
0

Comment puis-je modifier la largeur de trait d'un bouton rectangle lorsque j'appuie sur le bouton?Comment modifier la largeur de trait d'un rectangle de forme par programme

J'ai créé un fichier xml dans un dossier pouvant être tracé pour mon bouton personnalisé.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <corners 
     android:radius="9dp"/> 
    <gradient 
     android:angle="45" 
     android:centerX="9%" 
     android:centerColor="#84edb2" 
     android:startColor="#07e7cb" 
     android:endColor="#b0ede3" 
     android:type="linear" 
     /> 
    <size 
     android:width="40dp" 
     android:height="30dp" 
     /> 
    <stroke 
     android:width="2dp" // I want to change this programmatically. 
     android:color="#2f7E87" 
     /> 
</shape> 

Ci-dessous est mon code java. Je souhaite modifier la largeur de trait du bouton lorsque j'appuie sur le bouton.

public static void buttonEffect(View button){ 
    button.setOnTouchListener(new View.OnTouchListener() { 
     ShapeDrawable circle = new ShapeDrawable(new OvalShape()); 


     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 
        Button view = (Button) v; 
        int col = Color.parseColor("#40E0D0"); 
        view.getBackground().setColorFilter(col, PorterDuff.Mode.SCREEN); 
        v.invalidate(); 

        break; 
       } 
       case MotionEvent.ACTION_UP: 
        // Your action here on button click 
       case MotionEvent.ACTION_CANCEL: { 
        Button view = (Button) v; 
        view.getBackground().clearColorFilter(); 
        view.invalidate(); 
        break; 
       } 
      } 
      return true; 
     } 

    }); 
} 

Répondre

1

Je pense que la solution est: + Créer deux drawable de forme avec une course de la taille de la différence. + Lorsque vous appuyez sur le bouton, changez simplement l'arrière-plan en un autre dessin comme vous l'avez fait.

+0

Je suis nouveau android pouvez-vous me montrer comment faire que je ne sais pas que –

2

Essayez la solution ci-dessous, cela va vous aider à résoudre votre problème avec optimisme.

Here is a screenshot, Have a look

GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{ContextCompat.getColor(this,R.color.red_500), 
     ContextCompat.getColor(this,R.color.red_500), ContextCompat.getColor(this,R.color.red_500)}); 
gd.setShape(GradientDrawable.RECTANGLE); 
gd.setStroke((int)0.5, ContextCompat.getColor(this, R.color.black)); 
gd.setCornerRadius(8f); 
gd.setBounds(2, 2, 2, 2); 
btnCreateUser.setBackground(gd); 

Lorsque vous cliquez sur le bouton, la largeur jeu de course dans cette ligne selon vos besoins, pour que vous ne devez pas utiliser xml plus

i.e: gd.setStroke((int)1, ContextCompat.getColor(this, R.color.black)); 
i.e: gd.setStroke((int)3, ContextCompat.getColor(this, R.color.black)); 
+0

** merci homme grand travail ** –

+0

Heureux qu'il vous a aidé ... – Bhavnik

1

Il est basé sur @ Dương Nguyễn Văn réponse.

Vous disposez d'un bouton avec la largeur de trait par défaut de 2dp. Vous voulez maintenant que sa largeur de trait passe à 4dp lorsque vous appuyez dessus.
Ainsi, vous créez deux fichiers dessinables: bg_button_2.xml (largeur de trait = 2dp) et bg_button_4.xml (largeur de trait = 4dp).

Vous pouvez maintenant modifier son arrière-plan par programme.

button.setOnClickListener(new View.OnClickListener() { 
     @Override public void onClick(View view) { 
     button.setBackgroundResource(R.drawable.bg_button_4); 
     } 
});