zoukankan      html  css  js  c++  java
  • Android自定义组件系列【10】——随ViewPager滑动的导航条

    昨天在用到ViewPager实现滑动导航的时候发现微信的导航条效果是跟随ViewPager的滑动而动的,刚开始想了一下,感觉可以使用动画实现,但是这个滑动是随手指时时变化的,貌似不可行,后来再网上搜了一下,找到一个开源代码,结果打开一看大吃一惊,这么简单的效果代码居然大概有300多行,太占手机存储空间了!后来自己干脆重写ViewGroup使用scrollTo方法实现了一下,具体实现过程如下:

    package com.example.slideupdownviewpage;
    
    import android.content.Context;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.AttributeSet;
    import android.view.ViewGroup;
    
    /**
     * http://blog.csdn.net/dawanganban
     * @author 阳光小强
     *
     */
    public class ViewPagerTab extends ViewGroup{
    	
    	private ViewPager mViewPager;
    	private PageListener mPageListener = new PageListener();
    	private int mWidth;
    	private int mHeight; 
    
    	public ViewPagerTab(Context context, AttributeSet attrs) {
    		super(context, attrs);	
    	}
    	
    	@Override
    	protected void onLayout(boolean changed, int l, int t, int r, int b) {
    		if(getChildCount() > 0){
    			getChildAt(0).layout(0, 0, mWidth / 3, mHeight);  
    		}
    	}
    	
    	@Override
    	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    		mWidth = MeasureSpec.getSize(widthMeasureSpec);  
            mHeight = MeasureSpec.getSize(heightMeasureSpec); 
    	}
    	
    	public void setViewPager(ViewPager viewPager){
    		this.mViewPager = viewPager;
    		mViewPager.setOnPageChangeListener(mPageListener);
    	}
    	
    	private class PageListener implements OnPageChangeListener {
    
    		@Override
    		public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    			scrollTo(- position * mWidth / 3 - Math.round(positionOffset * mWidth / 3), 0);
    		}
    		
    		@Override
    		public void onPageSelected(int position) {
    		}
    		
    		@Override
    		public void onPageScrollStateChanged(int arg0) {
    		}
    	}
    }
    
    效果如下:


    完整源代码在GitHub地址:https://github.com/lxqxsyu/SlideUpDownViewPage



  • 相关阅读:
    Java语言基础(3)
    Java语言基础(2)
    Java语言基础(1)
    标准C语言(13)
    标准C语言(12)
    标准C语言(11)
    标准C语言(10)
    IDEA 学习笔记之 Console显示日志大小
    Java 学习笔记之 线程sleep方法
    Java 学习笔记之 线程isAlive方法
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468876.html
Copyright © 2011-2022 走看看