1 给RecyclerView添加分割线
recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
c.drawRect(0, 0, 3000, 100, paint);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDrawOver(c, parent, state);
Paint paint = new Paint();
paint.setColor(Color.RED);
c.drawRect(0, 100, 3000, 200, paint);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(10, 10, 10, 10);
}
});
onDraw是绘制背景色的方法
onDrawOver是绘制前景色的方法
getItemOffsets是设置每个item偏移量的方法。可以简单的理解为:Rect.set中的四个参数为item的 marginLeft , marginTop , marginRight , marginBottom
虚线作为item分隔线,代码如下
recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
final int childCount = parent.getChildCount();//得到出现在屏幕上子项的个数
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
//出现在屏幕上的子项个数,顶部一部分子项也算一个,底部的不算
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
//以下计算主要用来确定绘制的位置
final int top = child.getBottom() + params.bottomMargin;
//绘制虚线
Paint paint = new Paint();//可以用来画图形,文本与bitmap
paint.setStyle(Paint.Style.STROKE);//仅描边,空心
paint.setColor(Color.RED);
Path path = new Path();//线类
path.moveTo(left, top);//画笔的起点
path.lineTo(right, top);//终点位置
PathEffect effects = new DashPathEffect(new float[]{15, 15, 15, 15}, 5);//此处单位是像素不是dp 注意 请自行转化为dp ,DashPathEffect是将Path虚线化,第一个参数是实线与空白的长度(必须是偶数个),第二个参数表示view向左移动的距离
paint.setPathEffect(effects);表示图形是线段,并且给path设置样式(效果)
c.drawPath(path, paint);
}
}
});
LayoutParams类:用过view.getLayoutParams()的方式获取关于view布局的类,可以通过这个类来访问对应布局的各种属性。
每一次小小的滑动都运行上面的程序,重新设置虚线在屏幕中的位置。
注意:onDraw与getItemOffsets也可以做到上述效果。
2 搜索框:
<SearchView> </SearchView>
SearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
//每次点击搜索按钮的时候执行
@Override
public boolean onQueryTextSubmit(String newText) {
return false;
}
//每次搜索框中内容发生改变的时候执行
@Override
public boolean onQueryTextChange(String newText) {
return true;
}
});
3 SpannableStringBuilder: 可以改变使用其方法setSpan方法实现字符串各种形式风格的显示。比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉。
4 RadioButton
实现RadioButton由两部分组成,也就是RadioButton和RadioGroup配合使用.RadioGroup是单选组合框,可以容纳多个RadioButton的容器.在没有RadioGroup的情况下,RadioButton可以全部都选中;当多个RadioButton被RadioGroup包含的情况下,RadioButton只可以选择一个。并用setOnCheckedChangeListener来对单选按钮进行监听