针对本文进行了升级,控件更加强大,提供了很多方法及主题的修改: Android 仿淘宝选中商品不同尺寸的按钮组(二)
今天刚好有个同学他想做一个仿淘宝中的选中商品不同尺寸,比如衣服有L、M、XL等等的款式。这时候我们就需要一个button组来进行了,当时这个时候里面的尺寸可能有很多,那怎么办呢?这里我们就肯定要做个自适应的按钮组了,要不然弄出来也没用。废话不多说,先上个效果图:
是不是感觉起来效果蛮不错的呢?
现在我们就来说说里面的一些原理把!说句实话,我也不是大神,这个也是查询网上的一些原理问题弄出来的,希望大家不要嫌弃哦!么么哒!
一、原理:
1.其实这里我们用到的是一个ViewGroup控件组,把这些按钮加进去就有这种效果了!不过这里要继承ViewGroup(命名为:GoodsViewGroup)重写里面的一些方法。
2.主要的方法有:
GoodsViewGroup按钮组的控件大小
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
里面的按钮每个的位置坐标
protected void onLayout(boolean changed, int l, int t, int r, int b)
这两个方法的具体使用大家可以网上查阅资料,这里就不多说了!
二、代码:
/**
* Created by ShaoLin on 2016/8/22.
* 这里是类似淘宝中商品尺寸按钮组(这里做了支持button,textview)
*/
public class GoodsViewGroup<X extends TextView> extends ViewGroup {
public static final String BTN_MODE = "BTNMODE"; //按钮模式
public static final String TEV_MODE = "TEVMODE"; //文本模式
private static final String TAG = "IViewGroup";
private final int HorInterval = 10; //水平间隔
private final int VerInterval = 10; //垂直间隔
private int viewWidth; //控件的宽度
private int viewHeight; //控件的高度
private ArrayList<String> mTexts = new ArrayList<>();
private Context mContext;
private int textModePadding = 15;
//正常样式
private float itemTextSize = 18;
private int itemBGResNor = R.drawable.goods_item_btn_normal;
private int itemTextColorNor = Color.parseColor("#000000");
//选中的样式
private int itemBGResPre = R.drawable.goods_item_btn_selected;
private int itemTextColorPre = Color.parseColor("#ffffff");
public GoodsViewGroup(Context context) {
this(context, null);
}
public GoodsViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
/**
* 计算控件的大小
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec