在应用中界面,点击或双击状态栏区域,返回页面顶部
2017-08-17 20:03
381 查看
需求描述:在应用中界面,点击或双击状态栏区域,返回页面顶部;模仿ios的效果
实现方案:模拟事件下发
代码实现:
PhoneStatusBarView.java
public boolean onTouchEvent(MotionEvent event) {
中增加代码:
doScrollBack(event);
============================================
增加以下函数:
private void doScrollBack(MotionEvent event) {
final int action = event.getAction();
final int rawX = (int) event.getRawX();
/*
* 1、判断是否点击返回区域
*/
if (action == MotionEvent.ACTION_DOWN) {
/*
* 回滚顶部点击除时间和电池以外的区域都有效
*/
mScrollTriggered = (rawX > 0.25 * getWidth() && rawX < 0.75 * getWidth()) ? true : false;
}
/*
* 2、下拉取消回滚操作
*/
if (mPanel.getExpandedHeight() > 100) {
mScrollTriggered = false;
}
/*
* 3、松手后执行回滚操作
*/
if ((action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL)) {
if (mScrollTriggered) {
goScrollBack();
}
}
}
public void doScrollBack() {
//对ListView GridView处理
new Handler().postDelayed(doScrollBackRun_ListView, 150);
//对ScrollView处理
new Handler().postDelayed(doScrollBackRun_ScrollView, 150);
}
Runnable doScrollBackRun_ListView = new Runnable() {
public void run() {
long now = SystemClock.uptimeMillis();
final KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_MOVE_HOME, 0, 0);
final KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_MOVE_HOME, 0, 0);
InputManager.getInstance().injectInputEvent(down,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
InputManager.getInstance().injectInputEvent(up,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}
};
Runnable doScrollBackRun_ScrollView = new Runnable() {
public void run() {
long now = SystemClock.uptimeMillis();
final KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_DPAD_UP, 0, 0);
final KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_DPAD_UP, 0, 0);
InputManager.getInstance().injectInputEvent(down,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
InputManager.getInstance().injectInputEvent(up,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}
};
实现方案:模拟事件下发
代码实现:
PhoneStatusBarView.java
public boolean onTouchEvent(MotionEvent event) {
中增加代码:
doScrollBack(event);
============================================
增加以下函数:
private void doScrollBack(MotionEvent event) {
final int action = event.getAction();
final int rawX = (int) event.getRawX();
/*
* 1、判断是否点击返回区域
*/
if (action == MotionEvent.ACTION_DOWN) {
/*
* 回滚顶部点击除时间和电池以外的区域都有效
*/
mScrollTriggered = (rawX > 0.25 * getWidth() && rawX < 0.75 * getWidth()) ? true : false;
}
/*
* 2、下拉取消回滚操作
*/
if (mPanel.getExpandedHeight() > 100) {
mScrollTriggered = false;
}
/*
* 3、松手后执行回滚操作
*/
if ((action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL)) {
if (mScrollTriggered) {
goScrollBack();
}
}
}
public void doScrollBack() {
//对ListView GridView处理
new Handler().postDelayed(doScrollBackRun_ListView, 150);
//对ScrollView处理
new Handler().postDelayed(doScrollBackRun_ScrollView, 150);
}
Runnable doScrollBackRun_ListView = new Runnable() {
public void run() {
long now = SystemClock.uptimeMillis();
final KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_MOVE_HOME, 0, 0);
final KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_MOVE_HOME, 0, 0);
InputManager.getInstance().injectInputEvent(down,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
InputManager.getInstance().injectInputEvent(up,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}
};
Runnable doScrollBackRun_ScrollView = new Runnable() {
public void run() {
long now = SystemClock.uptimeMillis();
final KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_DPAD_UP, 0, 0);
final KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_DPAD_UP, 0, 0);
InputManager.getInstance().injectInputEvent(down,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
InputManager.getInstance().injectInputEvent(up,
InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}
};
相关文章推荐
- ios 点击返回顶部效果的实现,类似单击状态栏效果
- js,html 监听页面滚动高度 点击返回顶部
- 重复点击主界面(TabBar)按钮刷新界面--点击状态栏回到顶部
- 解决点击a标签返回页面顶部的问题
- JS中如何实现点击a标签返回页面顶部的问题
- jquery 点击按钮页面返回顶部
- ios设置点击状态栏返回到顶部
- 点击弹出子页面GridView,双击选值后返回
- js 界面滚动方法 点击返回到顶部
- 解决点击空链接返回页面顶部的方法
- JS实现效果-点击按钮返回到页面顶部
- Swift - 点击状态栏使tableView返回顶部(附:状态栏点击事件响应)
- Android ActionBar应用一:ActionBar返回任意页面和顶部搜索栏实现
- 点击top返回到页面顶部
- Android应用返回桌面后,每次点击图标,启动界面都会出现
- jquery实现点击按钮返回到页面顶部
- 解决点击浏览器返回按钮回到上一页面,页面变为初始界面的问题(java+html)
- ios设置点击状态栏返回到顶部
- 返回顶部,js,css,页面离开顶部一定距离后出现返回顶部,点击后滚动回顶部,支持IE,FF,chrome ,safari,opera[摘自布布分享,tech.bubufx.com]
- JQuery--点击返回页面顶部