自定义View总结2

时间:2021-04-09 06:02:50

自定义控件:

1.组合控件:将系统原生控件组合起来,加上动画效果,形成一种特殊的UI效果

2.纯粹自定义控件:继承自系统的View,自己去实现view效果

优酷菜单:

1.系统原生的旋转和位置动画并没有真正改变view的位置

轮播大图:

ViewPager:3.0之后才出现的,之前版本使用v4包里面的

关联jar包的源代码:
1.先点击Android Dependencies,将它从BuildPath remove掉,
再右键点击jar包,将jar add to BuildPath;
然后就出现Attatch Source按钮了
2.在libs目录下新建一个文件,文件名是jar包全名(包括后缀.jar),然后
该文件名以.properties结尾,新建一行键值对如:
src=jar源代码绝对路径,(不要忘了将单斜线变成双斜线) ViewPager预加载机制:最多保存3个page,超过的将需要被销毁掉 异常:类明明存在,却报class not found异常解决方法
右键工程,打开bulid path面板,选择Order And Export,
将对应jar打钩 最大是4;
4 -> 4
5 -> 0
6 -> 1
7 -> 2
8 -> 3

下拉选择:

1.假如listview的item中有Button,ImageButton,CheckBox等会强制获取焦点的view

此时,listview的item无法获取焦点,从而无法被点击

解决方法:给item的根布局增加以下属性

android:descendantFocusability=”blocksDescendants”

设置之后,Button获取焦点,item中其他控件也可以获取焦点

滑动开关——–

自定义控件步骤:

测量:onMeasure 设置自己显示在屏幕上的宽高

布局:onLayout 设置自己显示在屏幕上的位置(只有在自定义ViewGroup中才用到)

绘制:onDraw 控制显示在屏幕上的样子(自定义viewgroup时不需要这个)

View和ViewGroup的区别

1.他们都需要进行测量操作

2.ViewGroup主要是控制子view如何摆放,所以必须实现onLayout

View没有子view,所以不需要onLayout方法,但是必须实现onDraw

UI特效大全网站:http://www.23code.com/

最美锁屏

下拉刷新——-

1.addHeaderView必须在setAdapter之前调用

2.将paddingTop设置一个headerView高度的负值去隐藏它

getHeight()和getMeasuredHeight()的区别:
getMeasuredHeight():获取测量完的高度,只要在onMeasure方法执行完,就可以用
它获取到宽高,在自定义控件内部多使用这个
使用view.measure(0,0)方法可以主动通知系统去测量,然后就
可以直接使用它获取宽高
getHeight():必须在onLayout方法执行完后,才能获得宽高
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
headerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int headerViewHeight = headerView.getHeight();
//直接可以获取宽高
}
});
3.setSelection(position);将对应位置的item放置到屏幕顶端

侧滑菜单—

github-SlidingMenu

1.在ViewGroup中,让自己内容移动有以下几个方法:

layout(l,t,r,b);

offsetTopAndBottom(offset)和offsetLeftAndRight(offset);

scrollTo和scrollBy方法;

注意:滚动的并不是viewgroup内容本身,而是它的矩形边框

它是瞬间移动,

2.在自定义ViewGroup中一般不需要去实现onMeasure,
我们去实现系统已有的ViewGroup,比如FrameLayout,
它会帮我们区实现onMeasure方法 3.让view在一段时间内移动到某个位置
a.使用自定义动画(让view在一段时间内做某件事) b.使用Scroller(模拟一个执行流程,)