2016-08-01 4 views
0

У меня проблема с кнопкой переключения. Я пытаюсь расширить ButtonRectangle из библиотеки navasmdc, и я хочу добавить изображение. Что-то вроде ImageButton с эффектом пульсации.Пользовательская кнопка андроида с изображением

Я попытался установить фоновый рисунок, но он не имеет эффекта, который я хочу.

Я попытался сделать свою собственную кнопку переключения, но это зависит от моих навыков с эффектом пульсации.

Так что я прошу.

  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., но вы можете расширить его программно.

Ответ 2. Вопрос заключается в addView (View 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); 
} 

}