2016-08-01 18 views
0

Ich habe ein Problem mit der Umschalttaste. Ich versuche, ButtonRectangle aus Bibliothek navasmdc zu erweitern, und ich möchte Bild hinzufügen. So etwas wie ImageButton mit diesem Welleneffekt.Benutzerdefinierte Android-Taste mit Bild

Ich habe versucht, Hintergrund zeichnungsfähig zu setzen, aber es hat keinen Effekt ich will.

Ich habe versucht, meine eigene Toggle-Taste zu tun, aber es ist über meine Fähigkeiten mit diesem Welleneffekt.

Also ich frage.

  1. Ist es möglich, das Layout zu erweitern und ImageView hinzuzufügen?
  2. Wenn ja, wie wird es gemacht?

Hier ist mein Code, ich habe bisher:

public class StyleableToggleButton extends ButtonRectangle implements StyleableView, Checkable { 



private boolean checked = false; 
private int primaryColor = Config.DEFAULT_PRIMARY_COLOR; 
private int secondaryColor = Config.DEFAULT_SECONDARY_COLOR; 
private float rippleSpeed = 18f; 


public StyleableToggleButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    applyStyle(); 
    setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      toggle(); 
      applyStyle(); 
     } 
    }); 
    setRippleSpeed(rippleSpeed); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
     setBackgroundDrawable(getResources().getDrawable(R.drawable.direction_in_w)); 
    } 
} 

@Override 
public void setChecked(boolean b) { 
    checked = b; 
    applyStyle(); 
} 

@Override 
public boolean isChecked() { 
    return checked; 
} 

@Override 
public void toggle() { 
    checked = !checked; 
    applyStyle(); 
} 

@Override 
public void applyStyle() { 

    if (checked){ 
     this.setBackgroundColor(primaryColor); 
    }else { 
     this.setBackgroundColor(secondaryColor); 
    } 
} 

@Override 
protected int makePressColor(){ 
    return !checked ? primaryColor : secondaryColor; 
} 
} 

Antwort

0

ich später Antwort herausgefunden. Ich bin mir immer noch nicht sicher über Frage 1., aber Sie können es programmatisch erweitern.

Antwort 2. Frage ist addView (Blick v)

so mein Code wie folgt aussieht:

public class StyleableToggleButton extends ButtonRectangle implements StyleableView, Checkable { 



private boolean checked = false; 
private int primaryColor = Config.DEFAULT_PRIMARY_COLOR; 
private int secondaryColor = Config.DEFAULT_SECONDARY_COLOR; 
private float rippleSpeed = 18f; 
private TextView textView; 
private ImageView imageView; 
private LinearLayout linearLayout; 

private int minHeight; 
private float fontSize = 16f; 


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

    minHeight = (getResources().getDisplayMetrics().heightPixels - AttUtils.dpToPx(getResources().getDimension(R.dimen.height_att_activity_bar),getResources()))/4; 

    setupButton(); 

    setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      toggle(); 
      applyStyle(); 
     } 
    }); 
    setRippleSpeed(rippleSpeed); 


} 


//This is where we add textView and imageView to existing layout. We just kept previous empty. 
private void setupButton() { 

    setMinimumHeight(minHeight); 

    linearLayout = new LinearLayout(getContext()); 
    linearLayout.setOrientation(LinearLayout.VERTICAL); 


    LinearLayout.LayoutParams layoutParams; 
    layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    linearLayout.setLayoutParams(layoutParams); 

    layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    layoutParams.gravity = Gravity.CENTER_HORIZONTAL; 

    textView = new TextView(getContext()); 
    textView.setLayoutParams(layoutParams); 
    textView.setTypeface(null, Typeface.BOLD); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     textView.setTextAlignment(TEXT_ALIGNMENT_CENTER); 
    } 
    textView.setTextSize(fontSize); 

    layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    layoutParams.gravity = Gravity.CENTER_HORIZONTAL; 

    imageView = new ImageView(getContext()); 
    imageView.setLayoutParams(layoutParams); 

    linearLayout.addView(imageView); 
    linearLayout.addView(textView); 
    addView(linearLayout); 
} 

@Override 
public void setChecked(boolean b) { 
    checked = b; 
    applyStyle(); 
} 

@Override 
public boolean isChecked() { 
    return checked; 
} 

@Override 
public void toggle() { 
    checked = !checked; 
    applyStyle(); 
} 

@Override 
public void applyStyle() { 

    Drawable dr = imageView.getDrawable(); 
    if (checked){ 
     this.setBackgroundColor(primaryColor); 
     textView.setTextColor(secondaryColor); 
     if (dr != null) { 
      dr.setColorFilter(secondaryColor, PorterDuff.Mode.MULTIPLY); 
      imageView.setImageDrawable(dr); 
     } 
    }else { 
     this.setBackgroundColor(secondaryColor); 
     textView.setTextColor(primaryColor); 
     if (dr != null) { 
      dr.setColorFilter(primaryColor, PorterDuff.Mode.MULTIPLY); 
      imageView.setImageDrawable(dr); 
     } 
    } 

} 

@Override 
protected int makePressColor(){ 
    return !checked ? primaryColor : secondaryColor; 
} 


@Override 
public void setText(String text){ 
    textView.setText(text); 
} 

public void setImage(Drawable drawable){ 
    imageView.setImageDrawable(drawable); 
} 

public void setLayoutMargin(int marginWidth, int marginHeight){ 
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    layoutParams.setMargins(marginWidth, marginHeight, marginWidth, marginHeight); 
    linearLayout.setLayoutParams(layoutParams); 
} 

public void setTextViewMargin(int marginWidth, int marginHeight){ 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    layoutParams.setMargins(marginWidth, marginHeight, marginWidth, marginHeight); 
    textView.setLayoutParams(layoutParams); 
} 

public void setImageViewMargin(int marginWidth, int marginHeight){ 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    layoutParams.setMargins(marginWidth, marginHeight, marginWidth, marginHeight); 
    imageView.setLayoutParams(layoutParams); 
} 

}