ViewPager导航滑动Demo

最近看ViewPager的东西,写的小Demo,和大家分享,本人新手,希望多多提意见。

实现效果:背景图片仅作参考,通过反射对Viewpager的的属性做了修改,实现滑动效果的控制,实现动态添加导航圆点和滑动。具体参考源码。

           

启动页面代码

package com.example.testviewpager;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
import android.view.WindowManager;

public class AppStart extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.appstart);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
		
		new Handler().postDelayed(new Runnable() {
			
			@Override
			public void run() {
				Intent intent=new Intent(AppStart.this,MainActivity.class);
				startActivity(intent);
				AppStart.this.finish();
			}
		}, 2000);
	}
}

主Activity代码

package com.example.testviewpager;

import java.lang.reflect.Field;
import java.util.ArrayList;

import android.R.color;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity implements OnPageChangeListener {
	private ViewPager mViewPager;
	private PagerTitleStrip mPagerTitleStrip;
	private PagerAdapter pa;
	private ImageView mIndicatorList[];
	private LinearLayout ll;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mViewPager = (ViewPager) findViewById(R.id.viewpager);
		// mPagerTitleStrip = (PagerTitleStrip) findViewById(R.id.pagertitle);
		ll = (LinearLayout) findViewById(R.id.page_indicator);

		/*
		 * 
		 * 反射修改viewpagescroller属性
		 */
		try {
			Field fields = ViewPager.class.getDeclaredField("mScroller");
			fields.setAccessible(true);
			MyScroller scroller = new MyScroller(this,
					new AccelerateInterpolator());
			scroller.setduration(10000);
			fields.set(mViewPager, scroller);

		} catch (Exception e) {
			e.printStackTrace();
		}

		LinearLayout.LayoutParams ps = new LinearLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		ps.leftMargin = 30;
		pa = new MyPagerAdapter(this);
		mIndicatorList = new ImageView[pa.getCount()];
		for (int i = 0; i < pa.getCount(); i++) {
			ImageView image = new ImageView(this);
			image.setLayoutParams(ps);
			image.setBackgroundResource(R.drawable.morequery_light_frame);
			image.setScaleType(ScaleType.MATRIX);
			ll.addView(image);
			mIndicatorList[i] = image;
		}
		mIndicatorList[0]
				.setBackgroundResource(R.drawable.morequery_dark_frame);
		mViewPager.setAdapter(pa);
		mViewPager.setOnPageChangeListener(this);

	}

	public class MyPagerAdapter extends PagerAdapter {
		ArrayList<View> views = new ArrayList<View>();
		ArrayList<String> titles = new ArrayList<String>();
		Context mContext;

		public MyPagerAdapter(Context context) {
			mContext = context;
			LayoutInflater lf = LayoutInflater.from(mContext);

			TextView v1 = new TextView(mContext);
			v1.setText("Page1~@-@");
			v1.setGravity(Gravity.CENTER);
			v1.setBackgroundColor(Color.CYAN);
			View v2 = lf.inflate(R.layout.view2main, null);
			View v3 = lf.inflate(R.layout.view3main, null);
			views.add(v1);
			views.add(v2);
			views.add(v3);
			titles.add("tab1");
			titles.add("tab2");
			titles.add("tab3");

		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return views.size();
		}

		@Override
		public void destroyItem(View container, int position, Object object) {
			Log.i("dd", "删除item");
			((ViewPager) container).removeView(views.get(position));
		}

		@Override
		public CharSequence getPageTitle(int position) {

			return titles.get(position);
		}

		@Override
		public Object instantiateItem(View container, int position) {
			if (views.get(position).getParent() == null) {
				((ViewPager) container).addView(views.get(position));
			}
			return views.get(position);
		}

	}

	@Override
	public void onPageScrolled(int position, float positionOffset,
			int positionOffsetPixels) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onPageSelected(int position) {
		for (int i = 0; i < pa.getCount(); i++) {
			if (position == i) {
				mIndicatorList[position]
						.setBackgroundResource(R.drawable.morequery_dark_frame);
			} else {
				mIndicatorList[i]
						.setBackgroundResource(R.drawable.morequery_light_frame);
			}
		}

	}

	@Override
	public void onPageScrollStateChanged(int state) {

	}

}

MyScroller代码,用来控制ViewPager滑动效果。

package com.example.testviewpager;

import android.content.Context;
import android.view.animation.Interpolator;
import android.widget.Scroller;

public class MyScroller extends Scroller {
	private int duration = 2500;

	public MyScroller(Context context) {
		super(context);
	}

	public MyScroller(Context context, Interpolator interpolator) {
		super(context, interpolator);
	}

	@Override
	public void startScroll(int startX, int startY, int dx, int dy) {
		// TODO Auto-generated method stub
		super.startScroll(startX, startY, dx, dy, duration);
	}

	@Override
	public void startScroll(int startX, int startY, int dx, int dy, int duration) {
		// TODO Auto-generated method stub
		super.startScroll(startX, startY, dx, dy, duration);
	}

	public void setduration(int time) {
		duration = time;
	}

	private int getduration() {
		return duration;
	}
}


源码地址: http://download.csdn.net/detail/silk2018/6766809


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值