首页 > 系统 > Android > 正文

Android自定义ViewPager实例

2020-04-11 10:48:30
字体:
来源:转载
供稿:网友

本文实例讲述了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<-MAX_VELOCITY&&curScreen<getChildCount()-1){        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 < 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;    }  }}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表