最近看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