坚向的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(滑动条)组件的使用方法,这个 ...
随机推荐
- POJ 3253 STL优先队列
题目大意:FJ需要修补牧场的围栏,他需要 N 块长度为 Li 的木头(N planks of woods).开始时,FJ只有一块无限长的木板,因此他需要把无限长的木板锯成 N 块长度 为 Li 的木板 ...
- SHRINK SPACE Command : Online Segment Shrink for Tables, LOBs and IOTs
ORACLE-BASE - ALTER TABLE ... SHRINK SPACE Command : Online Segment Shrink for Tables, LOBs and IOTs ...
- 2.sql server的管理
sql server的管理:需要安装sql server 2005或者sql server 2008,若要使用sqlserver管理工具进行开发还要安装sql server management st ...
- 第二章 API的理解和使用
2.1.1全局命令 Key * 查看所有键,(慎用,会把所有键都遍历一次并列出) Dbsize 查看键总数,不会遍历所有键,只是从内置函数中读取一个数 Exists [key] 检查键是否存在 Del ...
- Android学习——数据存储之文件存储
将数据存储到文件中并读取数据 1.新建FilePersistenceTest项目,并修改activity_main.xml中的代码,如下:(只加入了EditText,用于输入文本内容,不管输入什么按下 ...
- 青橙 M4 解锁BootLoader 并刷入recovery ROOT
首先下载工具链接:https://pan.baidu.com/s/1o9xzTEi密码:7s7a 备用连接:https://pan.baidu.com/s/1bq47TMn 本篇教程教你如何傻瓜式解锁 ...
- Unity引擎GUI之Text
Text 文本 要显示的字符串. Font 字体 Font Style 加粗与倾斜 Font Size 字体大小 Line Spacing 行距,文本行之间的间距 Rich Text 勾选后,想要单独 ...
- Challenge–response authentication 挑战(询问)应答机制
In computer security, challenge–response authentication is a family of protocols in which one party ...
- sql server 查询时间 格式化输出
use test select * from vote insert into vote (contents) values(GETDATE()) insert into vote (contents ...
- X509 颁发者和使用者 详解
CN=公用名称C=国家ST=省份L =城市或者区域O=组织名称OU=组织单位名称