新手引导是每个 App 都具备的。如果新手引导直接用 Activity 来做,可能就会比较繁杂和冗余。所以一般都是 ViewPager 来实现。那么便会有 2 个问题:
- 不能手动滑动
- 当前 item 跳转到下一个 item 要平滑滑动
自定义ViewPager
可以解决这 2 个问题,下面直接上代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35package android.support.v4.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* 1、禁止左右滑动
* 2、setCurrentItem平滑切换
*/
public class NoScrollViewPager extends ViewPager {
public NoScrollViewPager(Context context) {
super(context);
}
public NoScrollViewPager(Context context, AttributeSet attr) {
super(context, attr);
}
void smoothScrollTo(int x, int y, int velocity) {
super.smoothScrollTo(x, y, 1);
}
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
}
禁止滑动通过触摸事件返回false
,这个很好理解了。setCurrentItem
及时添加第二个参数为true
也没有平滑滑动的效果,参考stackoverflow。
引申
Java 有四种访问权限修饰符:
访问权限 | 类 | 包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
通过上面的stackoverflow
可以看到,当Android Sdk
的某个方法是default
时,我们是没有权限调用的,有 2 种方式来解决问题:
- 反射
建立相同路径的包名,包访问域可以访问到default方法