2016-08-01 7 views
0

トグルボタンに問題があります。私は、ライブラリnavasmdcからButtonRectangleを拡張しようとしています。画像を追加したいのですが。リップル効果を持つImageButtonのようなもの。画像付きカスタムアンドロイドボタン

私は背景drawableを設定しようとしましたが、効果がありません。

自分のトグルボタンを作ろうとしましたが、その波及効果で自分のスキルを超えています。

私は尋ねています。

  1. レイアウトを拡張してImageViewを追加することはできますか?
  2. もしそうなら、どのように行われますか?ここで

私のコードですが、私はこれまで持っている:

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

答えて

0

私は後で答えを見つけました。私はまだ質問1についてはわかりませんが、あなたはそれをプログラム的に拡張することができます。

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

}

:2質問に対する

回答はaddView(ビューV)

はので、私のコードは次のようになりますされます