先总结下自定义 View 的步骤:
我把3用[]标出了,所以说3不一定是必须的,当然了大部分情况下还是需要重写的。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="titleText" format="string" />
<attr name="titleTextColor" format="color" />
<attr name="titleTextSize" format="dimension" />
<declare-styleable name="CustomTitleView">
<attr name="titleText" />
<attr name="titleTextColor" />
<attr name="titleTextSize" />
</declare-styleable>
</resources>format是值该属性的取值类型: string, color, demension, integer, enum, reference, float,boolean, fraction, flag;不清楚的可以google

mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(MotionEvent event);
// 获取1000毫秒内运行的像素
mVelocityTracker.computeCurrentVeleocity(1000)
// 获取1S内 X 方向上移动的像素
mVelocityTracker.getXVelocity()
// 最后记得释放
mVelocityTracker.recycle()mTextView.scrollTo(0, 25)
ViewDragHelper mViewDragHelper = ViewDragHelper.create(context, 1.0f, new ViewDragHelper.Callback(){
clampViewPositionHorizontal(View child, int left, int dx)
clampViewPositionVertical(View child, int left, int dx)
onViewDragStateChanged(int state){
ViewDragHelper.STATE_DRAGGING:
ViewDragHelper.STATE_IDLE:
ViewDragHelper.STATE_SETTLING:
}
}
然后代理两个方法
```java
public boolean onINterrceptTouchEvent(MotionEvent ev) {
return mViewDragHelper.shouldInterceptTouchEvent(ev);
}
public boolean onTouchEvent(MotionEvent ev) {
mViewDragHelper.processTouchEvent(ev);
return true;
}int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
int measureSpec = MeasureSpec.makeMeasureSpec(size, mode);