图片

时间:2016-08-01 12:35:57

标签: android button togglebutton

我在切换按钮时遇到问题。我试图从库navasmdc扩展ButtonRectangle,我想添加图像。像ImageButton这样的东西有涟漪效应。

我试图设置背景可绘制,但它没有效果我想要。

我尝试自己切换按钮,但是这种涟漪效应超过了我的技能。

所以我在问。

  1. 是否可以扩展布局并添加ImageView?
  2. 如果是这样,怎么办?
  3. 这是我的代码,到目前为止:

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

1 个答案:

答案 0 :(得分:0)

我后来发现了答案。我仍然不确定问题1,但你可以通过programmaticaly扩展它。

回答2.问题是addView(查看v)

所以我的代码看起来像这样:

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

}