参考自博客:http://www.cnblogs.com/xinye/archive/2013/06/09/3128209.html
目的:
进一步简单熟悉OnPageChangeListener, ViewPager浏览图片时候切换页面的时候有个缩放效果。
这里主要用了setPadding(...) 同理可以增加setAlpha(...)透明度改变的效果。
代码一: activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewPager" />
</LinearLayout>
代码二: MainActivity.java
public class MainActivity extends Activity {
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager=(ViewPager)findViewById(R.id.viewPager);
Integer[] drawableArray=new Integer[]{
R.drawable.dongzhi,R.drawable.hanlu
,R.drawable.liqiu,R.drawable.xiaohan
};
ArrayList<ImageView> list=new ArrayList<ImageView>();
for(int i=0;i<drawableArray.length;i++){
ImageView imgView=new ImageView(this);
imgView.setImageResource(drawableArray[i]);
list.add(imgView);
}
mViewPager.setAdapter(new mViewPagerAdapter(list));
mPageChangeListener listener=new mPageChangeListener(mViewPager,list);
mViewPager.setOnPageChangeListener(listener);
}
// Part2-->>Adapter适配器
class mViewPagerAdapter extends PagerAdapter{
private ArrayList<ImageView> viewList;
public mViewPagerAdapter(ArrayList<ImageView> viewList){
this.viewList=viewList;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view==obj;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeViewInLayout((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imgView=viewList.get(position);
container.addView(imgView);
return imgView;
}
}
//Part3 - ->>OnPageChangeListener监听类
class mPageChangeListener implements OnPageChangeListener{
int currentPageNo=0;
int offset=0;
int downX=0;
private ArrayList<ImageView> viewList;
private ViewPager viewPager;
public mPageChangeListener(ViewPager viewPager,ArrayList<ImageView>list){
this.viewPager=viewPager;
this.viewList=list;
this.viewPager.setOnTouchListener(new OnTouchListener(){
@Override
//本来想根据OnTouchListener对第0页和最后一页做处理的,结果。。。没弄出来,这里没有用到这个监听类
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: downX=(int) event.getX(); break;
case MotionEvent.ACTION_MOVE:
offset=(int)(event.getX()-downX); break;
case MotionEvent.ACTION_UP:
offset=0; downX=0; break;
}
return false;//false则go on,true则不会继续响应ViewPager本身的触摸事件机制;
}
});
}
@Override
public void onPageScrollStateChanged(int state) {
if(state==ViewPager.SCROLL_STATE_IDLE){
for(int i=0;i<viewList.size()-1;i++){
viewList.get(i).setPadding(0, 0, 0, 0);
}
}
Log.v("zz","zz-->>State="+state);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.v("zz","zz-->>position="+position+"--Offset="+positionOffset+"--offsetPixels="+positionOffsetPixels);
int paddingNum=50;
int paddingNext=(int)(paddingNum*(1-positionOffset));
int paddingCurr=(int)(paddingNum*positionOffset);
if(position!=viewList.size()-1){
viewList.get(position).setPadding(paddingCurr, paddingCurr, paddingCurr, paddingCurr);
viewList.get(position+1).setPadding(paddingNext, paddingNext, paddingNext, paddingNext);
//第N页滑向第N+1页 position=N;第N+1页滑向第N页,position=N;
}
}
@Override
public void onPageSelected(int position) {
}
}
}