/** * Change the checked state of this button immediately without showing animation. * @param checked The checked state. */ public void setCheckedImmediately(boolean checked){ if(getButtonDrawable() instanceof CheckBoxDrawable){ CheckBoxDrawable drawable = (CheckBoxDrawable)getButtonDrawable(); drawable.setAnimEnable(false); setChecked(checked); drawable.setAnimEnable(true); } else setChecked(checked); }
@Override protected void applyStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes){ super.applyStyle(context, attrs, defStyleAttr, defStyleRes); CheckBoxDrawable drawable = new CheckBoxDrawable.Builder(context, attrs, defStyleAttr, defStyleRes).build(); drawable.setInEditMode(isInEditMode()); drawable.setAnimEnable(false); setButtonDrawable(drawable); drawable.setAnimEnable(true); }
@Override public View getView(int position, View convertView, ViewGroup parent) { CompoundButton v = (CompoundButton)convertView; if(v == null) { if(mMode == MODE_MULTI_ITEMS){ v = new CheckBox(parent.getContext()); v.applyStyle(mCheckBoxStyle); } else{ v = new RadioButton(parent.getContext()); v.applyStyle(mRadioButtonStyle); } if(mItemHeight != ViewGroup.LayoutParams.WRAP_CONTENT) v.setMinHeight(mItemHeight); v.setGravity(Gravity.START | Gravity.CENTER_VERTICAL); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) v.setTextDirection(((InternalListView)parent).isLayoutRtl() ? View.TEXT_DIRECTION_RTL : View.TEXT_DIRECTION_LTR); v.setTextAppearance(v.getContext(), mItemTextAppearance); v.setCompoundDrawablePadding(mContentPadding); } v.setTag(position); v.setText(mItems[position]); if(v instanceof CheckBox) ((CheckBox) v).setCheckedImmediately(mSelected[position]); else ((RadioButton) v).setCheckedImmediately(mSelected[position]); v.setOnCheckedChangeListener(this); return v; }