viewpager一屏多个滑动效果


代码:(内存太小貌似容易溢出,这块没处理,有处理过得大家可以发出来共享下---我的手机跑了20张貌似没啥问题--老中兴)


package com.qiao.viewpager;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.qiao.view.ViewPagerCompat;
import com.qiao.view.ZoomOutPageTransformer;
import com.qiao.view.ViewPagerCompat.OnPageChangeListener;

/** 
* ViewPager 一屏多个 3D滑动效果。。。。。。 
* @author 有点凉了 
* QQ群:123869487 
* 求基友共同进步,求大神入群指点 
* 
*/  

public class MainActivity extends FragmentActivity
{    
	private static int     TOTAL_COUNT = 3;

	private RelativeLayout viewPagerContainer;
	int oneTouch = 0 ;
	int TwoTouch = 0;
	int ThrTouch = 0;
	private ViewPagerCompat mViewPager;
	private int[] mImgIds = new int[] { 
			R.drawable.image1,
			R.drawable.image2, 
			R.drawable.image3 ,
//			R.drawable.image1 ,
//			R.drawable.image3,
//			R.drawable.guide_image1,
//			R.drawable.guide_image2,
//			R.drawable.guide_image3,
//			R.drawable.guide_image5,
//			R.drawable.image1,
//			R.drawable.image1,
//			R.drawable.image2, 
//			R.drawable.image3 ,
//			R.drawable.image1 ,
//			R.drawable.image3,
//			R.drawable.guide_image1,
//			R.drawable.guide_image2,
//			R.drawable.guide_image3,
//			R.drawable.guide_image5,
//			R.drawable.image1
			};
	private List<ImageView> mImageViews = new ArrayList<ImageView>();
	private int current=0;
	private MyPagerAdapter2  myPagerAdapter;
	private int[] locationOne = null;
	private int[] locationTwo = null;
	private List<Fragment> listFragment = new ArrayList<Fragment>();
	private List<String> listMessage = new ArrayList<String>();
	
	public static MainActivity mActivity;
	private Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 0:
				
				break;

			default:
				break;
			}
		};
	};
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		mActivity = this;
		listMessage.add("拉布");
		listMessage.add("吉娃娃");
		listMessage.add("大葱");
//		listMessage.add("大葱1");
//		listMessage.add("大葱2");
//		listMessage.add("大葱11");
//		listMessage.add("大葱22");
//		listMessage.add("大葱33");
//		listMessage.add("大葱44");
//		listMessage.add("大葱55");
//		listMessage.add("拉布");
//		listMessage.add("吉娃娃");
//		listMessage.add("大葱");
//		listMessage.add("大葱1");
//		listMessage.add("大葱2");
//		listMessage.add("大葱11");
//		listMessage.add("大葱22");
//		listMessage.add("大葱33");
//		listMessage.add("大葱44");
//		listMessage.add("大葱55");
		initData();
		viewPagerContainer = (RelativeLayout) findViewById(R.id.pager_layout);
		mViewPager = (ViewPagerCompat) findViewById(R.id.id_viewpager);
		locationOne = new int[2];  
		locationTwo = new int[2];  
		
		mViewPager.setPageTransformer(true, new ZoomOutPageTransformer());
//		mViewPager.setPageTransformer(true, new DepthPageTransformer());
//		mViewPager.setPageTransformer(true, new RotateDownPageTransformer());
		myPagerAdapter = new MyPagerAdapter2(getSupportFragmentManager());
		mViewPager.setAdapter(myPagerAdapter);
//		mViewPager.setOffscreenPageLimit(TOTAL_COUNT);
		mViewPager.setOffscreenPageLimit(20);
		mViewPager.setPageMargin(10);
		viewPagerContainer.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // dispatch the events to the ViewPager, to solve the problem that we can swipe only the middle view.
            	/*if (event.getAction() == MotionEvent.ACTION_DOWN) {
					v.getLocationInWindow(locationTwo);
					int singPostion = locationTwo[0];
					if (singPostion>0&&singPostion<oneTouch) {
						int pos = mViewPager.getCurrentItem();
						if (pos==0) {
							
						}else {
							mViewPager.setCurrentItem(mViewPager.getCurrentItem()-1);
						}
					}
					
				}*/
                return mViewPager.dispatchTouchEvent(event);
            }
        });
		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int position) {
				myPagerAdapter.notifyDataSetChanged();
				View view = mViewPager.getChildAt(position);
				ImageView img = (ImageView) view.findViewById(R.id.imageView_show);
				TextView textView_show = (TextView) view.findViewById(R.id.textView_show);
				TextView textView_id = (TextView) view.findViewById(R.id.textView_id);
				img.setPadding(0, 0, 0, 0);
//				img.setImageResource(mImgIds[position]);
				img.setImageBitmap(readBitMap(mActivity, mImgIds[position]));
				textView_show.setText(listMessage.get(position));
				textView_id.setVisibility(View.VISIBLE);
				textView_id.setText(listMessage.get(position));
				
				
				int count = mViewPager.getChildCount();
				for (int i = 0; i < count; i++) {
					if (i==current) {
//						View view2 = mViewPager.getChildAt(i);
//						TextView textView_id2 = (TextView) view2.findViewById(R.id.textView_id);
//						TextView textView_show2 = (TextView) view2.findViewById(R.id.textView_show);
//						ImageView img2 = (ImageView) view2.findViewById(R.id.imageView_show);
//						textView_id2.setVisibility(View.VISIBLE);
//						textView_id2.setText(listMessage.get(i));
//						textView_show2.setText(listMessage.get(i));
//						img2.setPadding(0, 0, 0, 0);
//						myPagerAdapter.notifyDataSetChanged();
					}else {
						View view2 = mViewPager.getChildAt(i);
						TextView textView_id2 = (TextView) view2.findViewById(R.id.textView_id);
						TextView textView_show2 = (TextView) view2.findViewById(R.id.textView_show);
						ImageView img2 = (ImageView) view2.findViewById(R.id.imageView_show);
						textView_id2.setVisibility(View.GONE);
						textView_show2.setText(listMessage.get(i));
						img2.setPadding(5, 5, 5,5);
						myPagerAdapter.notifyDataSetChanged();
					}
				}
	            myPagerAdapter.notifyDataSetChanged();
	            current = position;
			}
			
			@Override
			public void onPageScrolled(int position, float positionOffset,
					int positionOffsetPixels) {
				// TODO Auto-generated method stub
				
				if (viewPagerContainer != null) {
	                viewPagerContainer.invalidate();
	            }
				int count = mViewPager.getChildCount();
				
				for (int i = 0; i < count; i++) {
					if (i==current) {
						View view = mViewPager.getChildAt(i);
						TextView textView_id2 = (TextView) view.findViewById(R.id.textView_id);
						TextView textView_show = (TextView) view.findViewById(R.id.textView_show);
						ImageView img = (ImageView) view.findViewById(R.id.imageView_show);
						textView_id2.setVisibility(View.VISIBLE);
						textView_id2.setText(listMessage.get(i));
						textView_show.setText(listMessage.get(i));
						img.setPadding(0, 0, 0, 0);
						myPagerAdapter.notifyDataSetChanged();
					}else {
						View view = mViewPager.getChildAt(i);
						TextView textView_id2 = (TextView) view.findViewById(R.id.textView_id);
						TextView textView_show = (TextView) view.findViewById(R.id.textView_show);
						ImageView img = (ImageView) view.findViewById(R.id.imageView_show);
						textView_id2.setVisibility(View.GONE);
						textView_show.setText(listMessage.get(i));
						img.setPadding(5, 5, 5,5);
						myPagerAdapter.notifyDataSetChanged();
					}
				}
			}
			
			@Override
			public void onPageScrollStateChanged(int state) {
				// TODO Auto-generated method stub
				
			}
		});
	}
	/*class MyPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return TOTAL_COUNT;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return (view == object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
        	ImageView imageView = mImageViews.get(position);
			imageView.setPadding(5, 5, 5, 5);
			container.addView(imageView);
			return imageView;

        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
        	 ((ViewPager)container).removeView((View)object);
        }
    }*/

	class MyPagerAdapter2 extends FragmentStatePagerAdapter {

		public MyPagerAdapter2(FragmentManager fm) {
			super(fm);
			// TODO Auto-generated constructor stub
		}

		@Override
		public Fragment getItem(int arg0) {
			Fragment fragment = new One(mImgIds[arg0],listMessage.get(arg0));
			listFragment.add(fragment);
			return fragment;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return mImgIds.length;
		}
		
	}
	private void initData()
	{
		for (int imgId : mImgIds)
		{
			ImageView imageView = new ImageView(getApplicationContext());
			imageView.setScaleType(ScaleType.CENTER_CROP);
			imageView.setImageResource(imgId);
			mImageViews.add(imageView);
		}
	}

	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		mViewPager.getLocationInWindow(locationOne);
		int oneX = locationOne[0];
		int oneY = locationOne[1];
		XyLog.v("TAGX", oneX+"");
		XyLog.v("TAGY", oneY+"");
		int width =  mViewPager.getWidth();
		int everyWidth = width / 3;
		 oneTouch = everyWidth;
		 TwoTouch = 2*everyWidth;
		 ThrTouch = 3*everyWidth;
	}
	
	/** 
	 * 以最省内存的方式读取本地资源的图片 
	 * @param context 
	 * @param resId 
	 * @return 
	 */  
	public static Bitmap readBitMap(Context context, int resId){  
	    BitmapFactory.Options opt = new BitmapFactory.Options();  
	    opt.inPreferredConfig = Bitmap.Config.RGB_565;   
	    opt.inPurgeable = true;  
	    opt.inInputShareable = true;  
	       //获取资源图片  
	    InputStream is = context.getResources().openRawResource(resId);  
	        return BitmapFactory.decodeStream(is,null,opt);  
	}  
	
    private Bitmap mergeBitmap(Bitmap firstBitmap, Bitmap secondBitmap) {
        Bitmap bitmap = Bitmap.createBitmap(firstBitmap.getWidth(), firstBitmap.getHeight(),
                firstBitmap.getConfig());
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(firstBitmap, new Matrix(), null);
        canvas.drawBitmap(secondBitmap, 0, 0, null);
        return bitmap;
    }
}


代码地址:

csdn代码地址

github代码地址

小弟淘宝店,祈求光临

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时有晌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值