当前位置: 移动技术网 > 移动技术>移动开发>Android > Android自定义ViewPager实例

Android自定义ViewPager实例

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网