坚向的ViewPager,上下滑动的组件,android上下滑动 VerticalPager
package com.zhulin.android.atools; import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Interpolator;
import android.widget.Scroller;
import android.widget.Toast; public class VerticalPager extends ViewGroup{ private Scroller mScroller;
private Context mContext;
public VerticalPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext=context;
mScroller=new Scroller(context);
// mScroller=new Scroller(mContext, new Interpolator() {
//
// @Override
// public float getInterpolation(float input) {
// return 300;
// }
// }); } @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int totalHeight=0;
int count=getChildCount(); for(int i=0;i<count;i++){
View childView=getChildAt(i); // int measureHeight=childView.getMeasuredHeight();
// int measureWidth=childView.getMeasuredWidth(); childView.layout(l, totalHeight, r, totalHeight+b); totalHeight+=b;
}
} private VelocityTracker mVelocityTracker; @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width=MeasureSpec.getSize(widthMeasureSpec);
int height=MeasureSpec.getSize(heightMeasureSpec); int count=getChildCount();
for(int i=0;i<count;i++){
getChildAt(i).measure(width, height);
}
setMeasuredDimension(width, height);
} private int mLastMotionY;
@Override
public boolean onTouchEvent(MotionEvent event) {
if(mVelocityTracker==null){
mVelocityTracker=VelocityTracker.obtain();
}
mVelocityTracker.addMovement(event); int action=event.getAction(); float y=event.getY(); switch(action){
case MotionEvent.ACTION_DOWN:
if(!mScroller.isFinished()){
mScroller.abortAnimation();
}
mLastMotionY=(int) y; Log.d("montion", ""+getScrollY());
break;
case MotionEvent.ACTION_MOVE:
int deltaY=(int) (mLastMotionY-y);
scrollBy(0,deltaY);
//mScroller.startScroll(0, getScrollY(), 0, deltaY);
invalidate(); mLastMotionY=(int) y;
break;
case MotionEvent.ACTION_UP:
if(mVelocityTracker!=null){
mVelocityTracker.recycle();
mVelocityTracker=null;
} if(getScrollY()<0){
mScroller.startScroll(0, -400, 0, 400);
}else if(getScrollY()>(getHeight()*(getChildCount()-1))){
View lastView=getChildAt(getChildCount()-1); mScroller.startScroll(0,lastView.getTop()+300, 0, -300);
}else{
int position=getScrollY()/getHeight();
int mod=getScrollY()%getHeight(); if(mod>getHeight()/3){
View positionView=getChildAt(position+1);
mScroller.startScroll(0, positionView.getTop()-300, 0, +300);
}else{
View positionView=getChildAt(position);
mScroller.startScroll(0, positionView.getTop()+300, 0, -300);
} }
invalidate();
break;
// case MotionEvent.ACTION_MASK:
// if(getScrollY()<0){
// mScroller.startScroll(0, 0, 0, 0);
// }else if(getScrollY()>(getHeight()*(getChildCount()-1)){
// }
// invalidate();
// break;
} return true;
} @Override
public void computeScroll() {
super.computeScroll(); if(mScroller.computeScrollOffset()){
scrollTo(0, mScroller.getCurrY());
}else{ }
} }
xml布局
<? xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <com.zhulin.android.atools.VerticalPager
android:id="@+id/vertyPager1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <TextView
android:background="@drawable/a1"
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="TextView1111" /> <TextView
android:background="@drawable/a2"
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:text="TextView2222" /> <TextView
android:background="@drawable/a3"
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:text="TextView2222" /> <TextView
android:background="@drawable/a4"
android:id="@+id/textView4"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:text="TextView2222" />
</com.zhulin.android.atools.VertyPager> </LinearLayout>
坚向的ViewPager,上下滑动的组件,android上下滑动 VerticalPager的更多相关文章
- 一个 Vue 的滑动按钮组件
git 地址:https://github.com/SyMind/vue-sliding-button vue-better-slider 一个 Vue 的滑动按钮组件,有关滑动方面的处理借鉴 bet ...
- 自己开发的 vue 滑动按钮组件 vue-better-slider
写在前面的 这个人第一次尝试开发并发布一个 vue 的组件,该组件实现了类似 ios 手机淘宝客户端 -> 消息界面中消息的滑动删除功能等,如下为该组件的文档. 一个 Vue 的滑动按钮组件,有 ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android 使用ViewPager结合PhotoView开源组件实现网络图片在线浏览功能
在实际的开发中,我们市场会遇到这样的情况:点击某图片,浏览某列表(某列表详情)中的所有图片数据,当然,这些图片是可以放大和缩小的,比如我们看下百度贴吧的浏览大图的效果: 链接 这种功能,在一些app ...
- Qt qml pageview 左右滑动分页组件
[先看效果] [下载]http://download.csdn.net/detail/surfsky/8516949 [调用] 分页视图 左右分页滑动列表组件 示例 PageView{ id: pv ...
- ViewPager+Fragment再探:和TAB滑动条一起三者结合
Fragment前篇: <Android Fragment初探:静态Fragment组成Activity> ViewPager前篇: <Android ViewPager初探:让页面 ...
- ViewPager禁止滑动以及它与内层滑动控件水平方向上事件冲突的解决方法
一.上图 二.场景描写叙述 最近在做项目的时候.遇到一个怪异的需求,描写叙述例如以下: 1.ViewPager中嵌套3个View,当从View1滑动到View2时禁止ViewPager的滑动事件. 2 ...
- Slider( 滑动条) 组件
本节课重点了解 EasyUI 中 Slider(滑动条)组件的使用方法,这个组件依赖于Draggable(拖动)组件. 一. 加载方式//class 加载方式<input class=" ...
- Fragment+ViewPager实现仿微信点击和滑动切换界面
这是在我写的新闻App中实现的界面切换 贴出切换界面的主要代码: xml代码: <span style="font-size:14px;"> <android.s ...
- 第二百二十节,jQuery EasyUI,Slider(滑动条)组件
jQuery EasyUI,Slider(滑动条)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Slider(滑动条)组件的使用方法,这个 ...
随机推荐
- HBase与RDBMS的区别
此讨论并不局限于HBase,也会延伸到MongoDB和Cassandra这样的NoSQL数据库. 1.RDBMS RDBMS有以下特点: 面向视图:RDBMS表使用固定的视图,表中的数据类型也会事先定 ...
- Laravel5.1学习笔记7 视图
视图 (View) 基本用法 传递数据到视图 在多个视图中分享数据 视图组件 #基本用法 视图里面包含了你应用程序所提供的 HTML 代码,并且提供一个简单的方式来分离控制器和网页呈现上的逻辑.视 ...
- Java 开源博客 Solo 1.2.0 发布 - 一键启动
Solo 1.2.0 正式发布了,感谢一直以来关注 B3log 开源的朋友! 在这个版本中,我们引入了一个新的特性 -- 独立模式: 不需要安装数据库.Servlet 容器 只需要安装好 Java 环 ...
- 如何通过WallpaperManager(壁纸管理器)设置与修改壁纸?
WallpaperManager(壁纸管理器),是手机壁纸相关的一个API的相关类.其设置壁纸常有如下三种方法可调用: - setBitmap(Bitmap bitmap):将壁纸设置为bitmap所 ...
- 轻量数据库SQLiteDataBase的相关操作方法
一.查询操作: 查询操作比较复杂,主要有如下操作: db.rawQuery(String sql, String[] selectionArgs); db.query(String table, St ...
- Java关于反射的用法
一. 首先是准备一个需要反射的类 public class Person { private String name; private int age; public String sex; publ ...
- VMWare虚拟机移动
1. 背景: 虚拟机:VM3 原安装路径:C:\Users\Administrator\Documents\Virtual Machines 移动到目标路径:D:\Virtual Machines ...
- 【PostgreSQL-9.6.3】如何实现非自动提交
我们在使用psql工具操作数据库时,事务是自动提交的.也就是说,当我们执行完一条insert或者delete语句后,在不输入commit情况下,这条语句也是提交的.如果不想自动提交,可以使用以下两种方 ...
- dubbo之多协议
(1) 不同服务不同协议 比如:不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议 consumer.xml <?xml version="1.0& ...
- 微信小程序开发常用方法
1.函数中访问data中的数据 _this.setData({ // 日历数据 signList: dataList, // 当前日期 todayDay: str }) 2.if判断 wx:if=&q ...