1.先配置GreenDao,Butterknife和EventBus
1.在model的build中加入依赖
//greendao
compile 'org.greenrobot:greendao:3.1.0'
compile 'org.greenrobot:greendao-generator:3.0.0'
//butterknife 黄油刀
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
//EventBus
compile 'org.greenrobot:eventbus:3.0.0'
**2.到这里EventBus已经配置完成,接着就是GreenDao和Butterknife了:
在model的build中添加:**
apply plugin: 'com.jakewharton.butterknife'//butterknife
apply plugin: 'org.greenrobot.greendao'//greendao
3.在model的最下面添加:
// 配置GreenDao基本参数
greendao {
//设置当前数据库版本
schemaVersion 1
//dao的包名,默认的是entity所在的包
daoPackage '包名+dao'
//生成数据库文件的目录
targetGenDir 'src/main/java'
}
4.在工程的build中的dependencies里添加greendao和butterknife的配置:
//butterknife
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
//greendao
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
到这里,这三个功能已经配置完成了,可以使用了。
2.首先是流失布局的配置,自定义继承ViewGroup设置
**1.自定义流式布局**
public class ReSouView extends ViewGroup {
//存储所有子View
private List<List<View>> mAllChildViews = new ArrayList<>();
//每一行的高度
private List<Integer> mLineHeight = new ArrayList<>();
public ReSouView(Context context) {
super(context);
}
public ReSouView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ReSouView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
mAllChildViews.clear();
mLineHeight.clear();
//获取当前ViewGroup的宽度
int width = getWidth();
int lineWidth = 0;
int lineHeight = 0;
//记录当前行的view
List<View> lineViews = new ArrayList<View>();
int childCount = getChildCount();
for(int i = 0;i < childCount; i ++){
View child = getChildAt(i);
MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();
int childWidth = child.getMeasuredWidth();
int childHeight = child.getMeasuredHeight();
//如果需要换行
if(childWidth + lineWidth + lp.leftMargin + lp.rightMargin > width){
//记录LineHeight
mLineHeight.add(lineHeight);
//记录当前行的Views
mAllChildViews.add(lineViews);
//重置行的宽高
lineWidth = 0;
lineHeight = childHeight + lp.topMargin + lp.bottomMargin;
//重置view的集合
lineViews = new ArrayList();
}
lineWidth += childWidth + lp.leftMargin + lp.rightMargin;
lineHeight = Math.max(lineHeight, childHeight + lp.topMargin + lp.bottomMargin);
lineViews.add(child);
}
//处理最后一行
mLineHeight.add(lineHeight);
mAllChildViews.add(lineViews);
//设置子View的位置
int left = 0;
int top = 0;
//获取行数
int lineCount = mAllChildViews.size();
for(int i = 0; i < lineCount; i ++){
//当前行的views和高度
lineViews = mAllChildViews.get(i);
lineHeight = mLineHeight.get(i);
for(int j = 0; j < lineViews.size(); j ++){
View child = lineViews.get(j);
//判断是否显示
if(child.getVisibility() == View.GONE){
continue;
}
MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();
int cLeft = left + lp.leftMargin;
int cTop = top + lp.topMargin;
int cRight = cLeft + child.getMeasuredWidth();
int cBottom = cTop + child.getMeasuredHeight();
//进行子View进行布局
child.layout(cLeft, cTop, cRight, cBottom);
left += child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin;
}
left = 0;
top += lineHeight;
}
}
@Override
protected