android viewpager自定义,android 自定义ViewPager

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

jump2Screen(curScreen+1);

}else{

int screen=(getScrollX()+screenWidth/2)/screenWidth;

jump2Screen(screen);

}

if (velocityTracker != null) {

velocityTracker.recycle();

velocityTracker = null;

}

break;

}

return true;

}

/**

* 跳转到指定Screen

* @param screen

*/

public void jump2Screen(int screen){

curScreen=screen;

if(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 

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 

View view = getChildAt(i);

view.layout(leftWidth, 0, leftWidth + screenWidth, screenHight);

leftWidth = leftWidth + screenWidth;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值