2017-05-02 4 views
0

Wie kann ich die Strichbreite einer Rechteckschaltfläche ändern, wenn ich die Taste drücke?So ändern Sie die Strichbreite eines Formrechtecks ​​programmgesteuert

Ich habe eine XML-Datei im Zeichnungsordner für meine benutzerdefinierte Schaltfläche erstellt.

<?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> 

Unten ist mein Java-Code. Ich möchte die Strichbreite der Schaltfläche ändern, wenn ich die Taste drücke.

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; 
     } 

    }); 
} 

Antwort

1

Ich denke Lösung ist: + Erstellen Sie zwei Form ziehbar mit Größe Schlaganfall Unterschied. + Wenn Sie auf die Schaltfläche tippen, ändern Sie einfach den Hintergrund zu anderen Zeichen wie Sie getan haben.

+0

: Ich bin auf Android können Sie mir zeigen, wie das zu tun, ich weiß nicht, dass –

2

Versuchen Sie unter Lösung, es wird Ihnen helfen, Ihr Problem hoffentlich zu lösen.

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); 

Wenn Sie Ihre Schaltfläche klicken, setzen Breite des Schlags in dieser Linie entsprechend Ihrer Anforderung, so dass Sie müssen xml nicht mehr verwenden

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

** thanks man großartige Arbeit ** –

+0

Froh, dass es Ihnen geholfen ... – Bhavnik

1

Es basiert auf @ Dương Nguyễn Văn Antwort.

Sie haben eine Schaltfläche mit der Standardstrichbreite von 2dp. Jetzt möchten Sie, dass die Strichstärke beim Drücken von 4dp geändert wird.
Sie erstellen also zwei ausklappbare Dateien: bg_button_2.xml (Strichbreite = 2dp) und bg_button_4.xml (Strichbreite = 4dp).

Jetzt können Sie den Hintergrund programmgesteuert ändern.

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