就是用LinearLayout 写的一列按钮,默认给个颜色值选中第一个,当点击第二个的时候选中第二个,同时恢复第一个。以此类推!
什么一个LinearLayout 变量,每次选中 一个LinearLayout ,就把这个LinearLayout 赋值给那个变量,点击下一个时,先判断这个变量是否为null,如果不是,就恢复它的样子
谢谢!我感觉您说的应该行得通!我先试试!
类似于这样实现一个Checkable的Button,然后选中一个时手动设置另外的几个,不过你如果不想手动设置的话可以重写LinearLayout, 在LinearLayout里面监听每个子View的点击点击其中一个时将其他的恢复。
public class CheckableImageView extends ImageView implements Checkable{
private boolean mChecked = false;
private Drawable mDrawable;
private Drawable mCheckedDrawable;
private Drawable mBgDrawable;
private Drawable mBgCheckedDrawable;
private OnClickListener mListener;
public CheckableImageView(Context context) {
this(context, null);
}
public CheckableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
initWithAttr(attrs);
}
private void initWithAttr(AttributeSet attrs){
if(attrs != null){
TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.CheckableImageView);
int srcId = typedArray.getResourceId(R.styleable.CheckableImageView_src, View.NO_ID);
int srcSelectedId = typedArray.getResourceId(R.styleable.CheckableImageView_srcSelected, View.NO_ID);
int bgSrcId = typedArray.getResourceId(R.styleable.CheckableImageView_bgSrc, View.NO_ID);
int bgSrcSelectedId = typedArray.getResourceId(R.styleable.CheckableImageView_bgsrcSelected, View.NO_ID);
if(srcId != View.NO_ID){
mDrawable = getResources().getDrawable(srcId);
}
if(srcSelectedId != View.NO_ID){
mCheckedDrawable = getResources().getDrawable(srcSelectedId);
}
if(bgSrcId == View.NO_ID){
int color = typedArray.getColor(R.styleable.CheckableImageView_bgSrc, Color.TRANSPARENT);
if(color != Color.TRANSPARENT){
mBgDrawable = new ColorDrawable(color);
}
} else{
mBgDrawable = getResources().getDrawable(bgSrcId);
}
if(bgSrcSelectedId == View.NO_ID){
int color = typedArray.getColor(R.styleable.CheckableImageView_bgsrcSelected, Color.TRANSPARENT);
if(color != Color.TRANSPARENT){
mBgCheckedDrawable = new ColorDrawable(color);
}
} else{
mBgCheckedDrawable = getResources().getDrawable(bgSrcSelectedId);
}
mChecked = typedArray.getBoolean(R.styleable.CheckableImageView_selected, false);
if(mChecked){
if(mBgCheckedDrawable != null){
setBackgroundDrawable(mBgCheckedDrawable);
}
if(mCheckedDrawable != null){
setImageDrawable(mCheckedDrawable);
}
} else{
if(mBgDrawable != null){
setBackgroundDrawable(mBgDrawable);
}
if(mDrawable != null){
setImageDrawable(mDrawable);
}
}
typedArray.recycle();
}
super.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setChecked(true);
if(mListener != null){
mListener.onClick(v);
}
}
});
}
@Override
public void setChecked(boolean checked) {
if(mChecked != checked){
mChecked = checked;
if(mChecked){
if(mBgCheckedDrawable != null){
setBackgroundDrawable(mBgCheckedDrawable);
}
if(mCheckedDrawable != null){
setImageDrawable(mCheckedDrawable);
}
} else{
if(mBgDrawable != null){
setBackgroundDrawable(mBgDrawable);
}
if(mDrawable != null){
setImageDrawable(mDrawable);
}
}
}
}
@Override
public boolean isChecked() {
return mChecked;
}
@Override
public void toggle() {
setChecked(!mChecked);
}
@Override
public void setOnClickListener(OnClickListener l) {
mListener = l;
}
}