设为首页 加入收藏

TOP

Android仿UC浏览器左右上下滚动功能(附源码)(四)
2015-02-25 16:15:13 来源: 作者: 【 】 浏览:81
Tags:Android 浏览器 左右 上下 滚动 功能 源码
f(event.getAction()==MotionEvent.ACTION_MOVE)
? ? {
? ? ? ? if(wantToScrollText)//当前想滚动显示文本
? ? ? ? ? ? return false;
? ? ? ? ? xMove=event.getRawX();?
? ? ? ? ? yMove=event.getRawY();?
? ? ? ? if(menuIsShow){
? ? ? ? ? ? isScrollToShowMenu();
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? if(!oneFucction)
? ? ? ? {
? ? ? ? ? ? oneFucction=true;
? ? ? ? ? ? //这个if只能被调用一次
? ? ? ? ? if(Math.abs(xDown-xMove)? ? ? ? ? ? ? {
? ? ? ? ? ? ? wantToScrollText=true;
? ? ? ? ? ? ? return false;
? ? ? ? ? ? ? }?
? ? ? ? }? ?
? ? ? ? isScrollToShowMenu();
? ? }
? ? ?
? ? else if(event.getAction()==MotionEvent.ACTION_UP)? ?
? ? {
? ? ? ? oneFucction=false;
? ? ? ? if(wantToScrollText){
? ? ? ? ? wantToScrollText=false;
? ? ? ? ? return false;
? ? ? ? }? ? ?
? ? ? ? ? xUp=event.getRawX();
? ? ? ? ? isShowMenu();
? ? ? ? ? releaseVelocityTracker();?
? ? }
? ? ?
? ? else if (event.getAction()==MotionEvent.ACTION_CANCEL)
? ? {? ? ? ?
? ? ? ? ? releaseVelocityTracker();
? ? ? ? ? return false;
? ? }
? ? ? return true;//false时才能把触摸事件再传给scroll
? }
? /**
? * 根据手指按下的距离,判断是否滚动显示菜单
? */
? private void isScrollToShowMenu()
? {
? ? ? ? int distanceX = (int) (xMove - xDown);? ? ?
? ? ? ? if (!menuIsShow) {
? ? ? ? ? ? ? scrollToShowMenu(distanceX);
? ? ? ? }else{
? ? ? ? ? ? ? scrollToHideMenu(distanceX);
? ? ? ? }
? }
? /**
? * 手指抬起之后判断是否要显示菜单
? */
? private void isShowMenu()
? {
? ? ? velocityX =getScrollVelocity();
? ? ? if(wantToShowMenu()){
? ? ? ? ? if(shouldShowMenu()){
? ? ? ? ? ? ? showMenu();
? ? ? ? ? }else{
? ? ? ? ? ? ? hideMenu();
? ? ? ? ? }
? ? ? }
? ? ? else if(wantToHideMenu()){
? ? ? ? ? if(shouldHideMenu()){
? ? ? ? ? ? ? hideMenu();
? ? ? ? ? }else{
? ? ? ? ? ? ? showMenu();
? ? ? ? ? }
? ? ? }? ?
? }
? /**
? *想要显示菜单,当向右移动距离大于0并且菜单不可见
? */
? private boolean wantToShowMenu(){
? ? ? return !menuIsShow&&xUp-xDown>0;
? }
? /**
? *想要隐藏菜单,当向左移动距离大于0并且菜单可见
? */
? private boolean wantToHideMenu(){
? ? ? return menuIsShow&&xDown-xUp>0;
? }
? /**
? *判断应该显示菜单,当向右移动的距离超过菜单的一半或者速度超过给定值
? */
? private boolean shouldShowMenu(){
? ? ? return xUp-xDown>menuParams.width/2||velocityX>SNAP_VELOCITY;
? }
? /**
? *判断应该隐藏菜单,当向左移动的距离超过菜单的一半或者速度超过给定值
? */
? private boolean shouldHideMenu(){
? ? ? return xDown-xUp>menuParams.width/2||velocityX>SNAP_VELOCITY;
? }
? /**
? * 显示菜单栏
? */
? private void showMenu()
? {
? ? ? new showMenuAsyncTask().execute(50);
? ? ? menuIsShow=true;
? }
? /**
? * 隐藏菜单栏
? */
? private void hideMenu()
? {
? ? new showMenuAsyncTask().execute(-50);
? ? menuIsShow=false;
? }
? /**
? *指针按着时,滚动将菜单慢慢显示出来
? *@param scrollX 每次滚动移动的距离
? */
? private void scrollToShowMenu(int scrollX)
? {
? ? ? if(scrollX>0&&scrollX<= menuParams.width)
? ? ? menuParams.leftMargin =-menuParams.width+scrollX;
? ? ? menuLayout.setLayoutParams(menuParams);?
? }
? /**
? *指针按着时,滚动将菜单慢慢隐藏出来
? *@param scrollX 每次滚动移动的距离
? */
? private void scrollToHideMenu(int scrollX)
? {
? ? ? if(scrollX>=-menuParams.width&&scrollX<0)
? ? ? menuParams.leftMargin=scrollX;
? ? ? menuLayout.setLayoutParams(menuParams);?
? }
? ?
? ?
? /**?
? * 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。?
? * @param event 向VelocityTracker添加MotionEvent?
? */?
? private void acquireVelocityTracker(final MotionEvent event) {?
? ? ? if(null == mVelocityTracker) {?
? ? ? ? ? mVelocityTracker = VelocityTracker.obtain();?
? ? ? }?
? ? ? mVelocityTracker.addMovement(event);?
? }?
? /**?
? * 获取手指在content界面滑动的速度。?
? * @return 滑动速度,以每秒钟移动了多少像素值为单位。?
? */?
? private int getScrollVelocity() {?
? ? ? mVelocityTracker.computeCurrentVelocity(1000);?
? ? ? int velocity = (int) mVelocityTracker.getXVelocity();?
? ?
? ? ? return Math.abs(velocity);?
? }?
? /**?
? * 释放VelocityTracker?
? */?
? private void rele
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇为你的 Android 应用增加本地搜索.. 下一篇Android侧边栏的自定义实现(附源..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: