GestureDetector+Scroller +scrollBy实现仿viewpager
来源:互联网 发布:日程安排提醒软件 编辑:程序博客网 时间:2024/06/05 16:55
package com.practice.syd.gesture;import android.content.Context;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.Scroller;/** * Created by Administrator on 2017/11/16. */class MyViewPager extends ViewGroup { private GestureDetector gestureDetector; private Context context; private float startX; private Scroller scroll; private int currentposition; private float endX; public MyViewPager(Context context, AttributeSet attrs) { super(context, attrs); this.context=context; initview(); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { for(int i=0;i<getChildCount();i++){ View view=getChildAt(i); view.layout(getWidth()*i,0,getWidth()*(i+1),getHeight()); } } private void initview(){ scroll=new Scroller(context);//手势识别器 gestureDetector=new GestureDetector(context, new GestureDetector.OnGestureListener() { @Override public boolean onDown(MotionEvent e) { return false; } @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { scrollBy((int)distanceX,0); return true; } @Override public void onLongPress(MotionEvent e) { } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } }); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); gestureDetector.onTouchEvent(event); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: startX=event.getX(); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: endX=event.getX(); int tempposition = currentposition; if(endX-startX>getWidth()/2){ tempposition--; }else if(startX-endX>getWidth()/2){ tempposition++; } scrolltopager(tempposition); } return true; } private void scrolltopager(int tempposition) { if(tempposition<0) tempposition=0; else if(tempposition>getChildCount()-1) tempposition=getChildCount()-1; currentposition=tempposition;// scrollTo(currentposition*getWidth(),0); scroll.startScroll(getScrollX(),getScrollY(),currentposition*getWidth()-getScrollX()); invalidate(); } @Override public void computeScroll() {// super.computeScroll(); if(scroll.computeScrollOffset()){ int x=scroll.getCurrX(); scrollTo(x,0); invalidate(); } }}
阅读全文
0 0
- GestureDetector+Scroller +scrollBy实现仿viewpager
- 用GestureDetector实现ViewPager功能
- 总结Scroller ScrollTo ScrollBy
- android关于Scroller与GestureDetector实现滚动的效果
- App 引导界面 ViewPager+ GestureDetector实现
- 用Scroller实现简单viewpager滑动
- Scroller、scrollTo、ScrollBy学习笔记
- View移动、Scroller、GestureDetector详解
- View 的滑动实现之二(ScrollTo,ScrollBy和Scroller)
- 仿viewPager-实现滑动翻页
- Android scrollTo() scrollBy() Scroller讲解及应用
- Android scrollTo() scrollBy() scroller 学习总结
- Android Scroller入门(一)之ScrollTo、ScrollBy
- Android scrollTo() scrollBy() Scroller讲解及应用
- View的scrollTo(),scrollBy()以及Scroller,OverScroller
- Android scrollTo() scrollBy() Scroller讲解及应用
- scrollTo/scrollBy的区别,scroller的玩法
- 自定义控件:仿ViewPager实现左右滑动
- 开源Json解析器的浅述
- 请定义一个交通工具(Vehicle)的类
- 通用封装系列——Tomcat下的Servlet配置
- 利用长轮询实现模仿网页扫码登录逻辑生成验证随机数
- 【示例教程】LEADTOOLS中如何载入DICOM文件并压缩
- GestureDetector+Scroller +scrollBy实现仿viewpager
- 改变鼠标贴图,点击变化
- 下载与安装nexus3
- JAVA课程5 动物叫声模拟器
- 【经验】谈谈怎么找自己想要的资源吧~
- 记录python2(一)
- 企业云服务的重要性介绍
- 不忘初心,持之以恒,笔耕不辍,利人利己
- windows10系统安装mysql5.6版本压缩包数据库