博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 自定义ViewPager
阅读量:7188 次
发布时间:2019-06-29

本文共 3068 字,大约阅读时间需要 10 分钟。

hot3.png

package com.rong.activity;import android.content.Context;import android.graphics.Color;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.VelocityTracker;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.Scroller;public class CustomViewPager extends ViewGroup {	private Context mContext;	private int screenWidth;	private int screenHight;	private int lastMoveX = 0;	private VelocityTracker velocityTracker;	private int MAX_VELOCITY=600;	private int curScreen=0;	private Scroller scroller;	public CustomViewPager(Context context) {		super(context);		mContext = context;		initView();	}	public CustomViewPager(Context context, AttributeSet attrs) {		super(context, attrs);		mContext = context;		initView();	}	public CustomViewPager(Context context, AttributeSet attrs, int defStyle) {		super(context, attrs, defStyle);		mContext = context;		initView();	}	@Override	public boolean onTouchEvent(MotionEvent event) {		if (velocityTracker == null) {			velocityTracker = VelocityTracker.obtain();		}		velocityTracker.addMovement(event);		int x = (int) event.getX();		switch (event.getAction()) {		case MotionEvent.ACTION_DOWN:			lastMoveX = x;			break;		case MotionEvent.ACTION_MOVE:			int dis = lastMoveX - x;			scrollBy(dis, 0);			lastMoveX = x;			break;		case MotionEvent.ACTION_UP:			velocityTracker.computeCurrentVelocity(1000);			int velocityX=(int)velocityTracker.getXVelocity();			if(velocityX>MAX_VELOCITY&&curScreen>0){				jump2Screen(curScreen-1);			}else if(velocityX<-MAX_VELOCITY&&curScreen
getChildCount()-1){ curScreen=getChildCount()-1; } int dis=curScreen*screenWidth-getScrollX(); scroller.startScroll(getScrollX(), 0, dis, 0); invalidate(); } @Override public void computeScroll() { if(scroller.computeScrollOffset()){ scrollTo(scroller.getCurrX(), 0); postInvalidate(); } } public void initView() { scroller=new Scroller(mContext); LinearLayout layout1 = new LinearLayout(getContext()); layout1.setBackgroundColor(Color.RED); addView(layout1); LinearLayout layout2 = new LinearLayout(getContext()); layout2.setBackgroundColor(Color.GREEN); addView(layout2); LinearLayout layout3 = new LinearLayout(getContext()); layout3.setBackgroundColor(Color.BLUE); addView(layout3); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); screenWidth = MeasureSpec.getSize(widthMeasureSpec); screenHight = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(screenWidth, screenHight); for (int i = 0; i < getChildCount(); i++) { View view = getChildAt(i); view.measure(screenWidth, screenHight); } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int leftWidth = 0; for (int i = 0; i < getChildCount(); i++) { View view = getChildAt(i); view.layout(leftWidth, 0, leftWidth + screenWidth, screenHight); leftWidth = leftWidth + screenWidth; } }}

转载于:https://my.oschina.net/547217475/blog/485917

你可能感兴趣的文章
ZooKeeper管理指南
查看>>
jqGrid随浏览器缩放自适应宽度
查看>>
JavaScript函数补完:splice()数组操作
查看>>
Souce Control Management-EGit
查看>>
长连接的心跳及重连设计
查看>>
ORA-00020: maximum number of processes (1000) 错误处理
查看>>
cas单点登录集群如何优雅的退出
查看>>
[置顶] spring2.5 + struts2 + ibatis2.3.4 框架整合开发
查看>>
第一次作业
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
安装配置管理 之 安装和配置 Java J2SE Development Kit(JDK)
查看>>
ORACLE常用函数实例
查看>>
php 调用webservers 错误,请高手帮助
查看>>
软件包管理 之 Freshrpms.net 资源介绍,及apt 和yum 的应用
查看>>
我的友情链接
查看>>
PHP在Apache下500错误的原因
查看>>
实用cmd指令(4)
查看>>
jenkins pipeline脚本 构建 java 项目例子
查看>>