2016-08-01 3 views
0

J'ai un problème avec le bouton bascule. J'essaie d'étendre ButtonRectangle de la bibliothèque navasmdc et je veux ajouter une image. Quelque chose comme ImageButton avec cet effet d'entraînement.Bouton android personnalisé avec l'image

J'ai essayé de mettre en arrière-plan drawable, mais il n'a pas l'effet que je veux.

J'ai essayé de faire mon propre bouton à bascule, mais c'est sur mes compétences avec cet effet d'entraînement.

Donc je demande. Est-il possible d'étendre la disposition et d'ajouter ImageView?

  1. Si oui, comment cela se passe-t-il?

Voici mon code, j'ai jusqu'à présent:

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

Répondre

0

j'ai découvert réponse plus tard. Je ne suis toujours pas sûr de la question 1., mais vous pouvez l'étendre par programme.

Réponse à 2. La question est addView (Voir v) si mon code

ressemble à ceci:

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

}