坚向的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(滑动条)组件的使用方法,这个 ...
随机推荐
- QQ 临时会话+图标 HTML代码
啦啦啦 QQ会话的HTML代码 <a target="_blank" href="http://wpa.qq.com/msgrd?v=3& uin=2553 ...
- C - Lucky Numbers (easy)
Problem description Petya loves lucky numbers. Everybody knows that positive integers are lucky if t ...
- 06-联系人管理(xib应用)
ViewController.h文件中: @interface ViewController : UIViewController - (IBAction)add:(UIBarButtonItem * ...
- Rabbit--ack机制
消息应答时执行一个任务可能需要花费几秒钟,你可能会担心如果一个消费者在执行任务过程中挂掉了. 一旦RabbitMQ将消息分发给了消费者,就会从内存中删除.在这种情况下,如果正在执行任务的消费者宕机,会 ...
- 三维重建:SLAM算法的考题总结
参考英文维基:https://en.wikipedia.org/wiki/Slam 参考文档:视觉slam研究分析的一点认识 1. 请简单描述您对机器人的SLAM的概念理解? 答: 机器人需要在自身位 ...
- ICCV2015上的GazeTracker论文总结
SLAM问题先慢慢编译一段时间,赶紧拾起来GazeTrack的事情...... ICCV2015的大部分paper已经可以下载,文章列表在这个位置. http://www.cvpapers.com/i ...
- mysql手册操作
1.show table status 显示表状态 2.VERSION() 版本:CURRENT_DATE 当前日期: NOW() 当前时间:USER 当前用户 3.GRANT A ...
- (转)Arcgis for Js之GeometryService实现测量距离和面积
http://blog.csdn.net/gisshixisheng/article/details/40540601 距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryServ ...
- 移动pc常用Meta标签
移动常用 <meta charset="UTF-8"> <title>{$configInfos['store_title']}</title> ...
- Testbench文件编写纪要(Verilog)
之前在使用Verilog做FPGA项目中.以及其他一些不同的场合下,零散的写过一些练手性质的testbench文件,开始几次写的时候,每次都会因为一些基本的东西没记住.写的很不熟练,后面写的时候稍微熟 ...