viewpager一屏多个滑动效果

来源:互联网 发布:mac五笔拼音输入法 编辑:程序博客网 时间:2024/06/14 11:21


代码:(内存太小貌似容易溢出,这块没处理,有处理过得大家可以发出来共享下---我的手机跑了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;}};};@Overrideprotected 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() {@Overridepublic 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;}@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO Auto-generated method stubif (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();}}}@Overridepublic 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}@Overridepublic Fragment getItem(int arg0) {Fragment fragment = new One(mImgIds[arg0],listMessage.get(arg0));listFragment.add(fragment);return fragment;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn 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);}}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.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
原创粉丝点击