博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
仿车轮社区图片切换效果
阅读量:7040 次
发布时间:2019-06-28

本文共 11942 字,大约阅读时间需要 39 分钟。

  hot3.png

import android.support.v4.view.ViewPager.PageTransformer;import android.view.View;/** * created by bruce.zhang */public class BBSPicturePageTransformer implements PageTransformer {   private static final float ROTATION_MAX = 10.0f;   private static float MIN_SCALE = 0.9f;   private static float MIN_ALPHA = 0.7f;    private float mRotation;   @Override   public void transformPage(View view, float position) {      int pageWidth = view.getWidth();      if (position < -1) {          view.setTranslationX(0);         view.setRotation(0);         view.setRotation(0);         view.setScaleX(1);         view.setScaleY(1);         view.setAlpha(MIN_ALPHA);      } else if (position <= 0) {         view.setTranslationX(0);         mRotation = (ROTATION_MAX * position);         view.setPivotX(view.getMeasuredWidth() * 0.5f);            view.setPivotY(view.getMeasuredHeight());            view.setRotation(mRotation);         float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));         view.setScaleX(scaleFactor);         view.setScaleY(scaleFactor);         float alphaFactor = MIN_ALPHA + (1 - MIN_ALPHA) * (1 - Math.abs(position));         view.setAlpha(alphaFactor);      } else if (position <= 1) {          view.setTranslationX(pageWidth * -position);         view.setRotation(0);         view.setScaleX(1);         view.setScaleY(1);         view.setAlpha(1);      } else {         view.setTranslationX(0);         view.setRotation(0);         view.setScaleX(1);         view.setScaleY(1);         view.setAlpha(1);      }   }}
import android.content.Context;import android.os.Handler;import android.os.Message;import android.support.v4.view.MotionEventCompat;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewConfigurationCompat;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewConfiguration;import android.view.ViewGroup;import android.view.animation.Interpolator;import com.kidswant.ss.R;import com.kidswant.ss.ui.bbs.model.PicItem;import java.lang.ref.WeakReference;import java.lang.reflect.Field;import java.util.ArrayList;/** * Created by bruce.zhang on 2015/12/19. */public class BBSPictureViewPager extends ViewPager {    private static BBSPicturePageTransformer mPageTransformer = new BBSPicturePageTransformer();    private BBSPicturePageAdapter mAdapter;    private int mPadding = 0;    private ViewPagerHandler mHandler = new ViewPagerHandler(this);    private class ViewPagerHandler extends Handler {        private final WeakReference
 mService;        ViewPagerHandler(BBSPictureViewPager service) {            super();            mService = new WeakReference
(service);        }        @SuppressWarnings("unchecked")        @Override        public void handleMessage(Message msg) {            BBSPictureViewPager service = mService.get();            if (service == null ) {                return;            }            if(msg.what == 898989)            {                int pageIndex = msg.arg1;                setCurrentItem(pageIndex, false);            }        }    };    public BBSPictureViewPager(Context context) {        super(context);        init();    }    public BBSPictureViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    private void init()    {        setOffscreenPageLimit(2);        setPageTransformer(true, mPageTransformer);        int margin = getResources().getDimensionPixelSize(R.dimen.common_horizontal_margin);        mPadding = 2 * margin;        try {            Field mScroller;            mScroller = ViewPager.class.getDeclaredField("mScroller");            mScroller.setAccessible(true);            Field interpolator = ViewPager.class.getDeclaredField("sInterpolator");            interpolator.setAccessible(true);            FixedSpeedScroller scroller = new FixedSpeedScroller(getContext(), (Interpolator) interpolator.get(null));            // scroller.setFixedDuration(5000);            mScroller.set(this, scroller);        } catch (NoSuchFieldException e) {        } catch (IllegalArgumentException e) {        } catch (IllegalAccessException e) {        }        final ViewConfiguration configuration = ViewConfiguration.get(getContext());        mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(configuration);        setOnPageChangeListener(new OnPageChangeListener() {            @Override            public void onPageScrollStateChanged(int state) {            }            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)            {            }            @Override            public void onPageSelected(int position) {                mHandler.removeMessages(898989);                if(mAdapter.getCount() <= 1) return;                int pageIndex = position;                if (position == 0) {                    // 当视图在第一个时,将页面号设置为图片的最后一张。                    pageIndex = mAdapter.getCount() - 2;                } else if (position == mAdapter.getCount() - 1) {                    // 当视图在最后一个是,将页面号设置为图片的第一张。                    pageIndex = 1;                }                if (position != pageIndex) {                    mHandler.sendMessageDelayed(mHandler.obtainMessage(898989, pageIndex, 0, 0), 400);                }            }        });    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)    {        int width = MeasureSpec.getSize(widthMeasureSpec);        int height = width - mPadding;        super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),                MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));    }    private float mLastMotionX;    private float mLastMotionY;    private boolean mIsBeingDragged;    private int mTouchSlop;    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        boolean intercept = super.onInterceptTouchEvent(ev);        if(!intercept)        {            final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;            if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {                mIsBeingDragged = false;            }            switch (action) {                case MotionEvent.ACTION_MOVE: {                    final float x = ev.getX();                    final float xDiff = Math.abs(x - mLastMotionX);                    final float y = ev.getY();                    final float yDiff = Math.abs(y - ev.getY());                    mIsBeingDragged = xDiff > mTouchSlop || yDiff > mTouchSlop;                    break;                }                case MotionEvent.ACTION_DOWN: {                    mIsBeingDragged = false;                    mLastMotionX = ev.getX();                    mLastMotionY = ev.getY();                    break;                }            }            intercept = mIsBeingDragged;        }        return intercept;    }    public void setData(LayoutInflater inflater, int coverWidth, ArrayList
 picItems, View.OnClickListener onClickListener, int currentItem)    {        setData(inflater, coverWidth, picItems, onClickListener, onClickListener, currentItem);    }    public void setData(LayoutInflater inflater, int coverWidth, ArrayList
 picItems, View.OnClickListener onClickListener, View.OnClickListener onImageTagClickListener, int currentItem)    {        View view1 = ((ViewGroup)getParent()).findViewById(R.id.img_multi_hint1);        View view2 = ((ViewGroup)getParent()).findViewById(R.id.img_multi_hint2);        int shadowCount = (picItems == null || picItems.size() <= 1) ? 0 : (picItems.size() == 2 ? 1: 2);        if(view1 != null && view2 != null)        {            if(shadowCount == 0)            {                view1.setVisibility(View.GONE);                view2.setVisibility(View.GONE);            }            else if(shadowCount == 1)            {                view1.setVisibility(View.VISIBLE);                view2.setVisibility(View.GONE);            }            else            {                view1.setVisibility(View.VISIBLE);                view2.setVisibility(View.VISIBLE);            }        }        PagerAdapter adapter = getAdapter();        if(adapter == null)        {            mAdapter = new BBSPicturePageAdapter(inflater, coverWidth);        }        mAdapter.setOnItemClickListener(onClickListener);        mAdapter.setOnImageTagClickListener(onImageTagClickListener);        mAdapter.setDatas(picItems);        setAdapter(mAdapter);        if(currentItem == 0)        {            currentItem = 1;        }        currentItem = Math.min(currentItem, mAdapter.getCount() - 1);        setCurrentItem(currentItem, false);    }}
import android.support.v4.view.PagerAdapter;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.kidswant.ss.R;import com.kidswant.ss.ui.bbs.fragment.ImageTagDragableLayout;import com.kidswant.ss.ui.bbs.model.PicItem;import com.kidswant.ss.ui.bbs.service.BBSUIUtil;import com.kidswant.ss.util.ImageLoaderUtil;import java.util.ArrayList;/** * created by bruce.zhang */public class BBSPicturePageAdapter extends PagerAdapter {   private LayoutInflater mInflater;   private SparseArray
 mViews;   private ArrayList
 mDatas = new ArrayList
();   private int mCoverWidth;   private View.OnClickListener mOnClickListener;   private View.OnClickListener mOnImageTagClickListener = null;   BBSPicturePageAdapter(LayoutInflater inflater, int coverWidth) {      mInflater = inflater;      mViews = new SparseArray
();      mCoverWidth = coverWidth;   }   public void setOnItemClickListener(View.OnClickListener onClickListener)   {      mOnClickListener = onClickListener;   }   public void setOnImageTagClickListener(View.OnClickListener onClickListener)   {      mOnImageTagClickListener = onClickListener;   }   public void setDatas(ArrayList
 datas)   {      mDatas.clear();      if(datas != null)      {         mDatas.addAll(datas);      }      notifyDataSetChanged();   }   @Override   public int getCount() {      if(mDatas == null || mDatas.isEmpty())      {         return 0;      }      else if(mDatas.size() == 1)      {         return 1;      }      else      {         return mDatas.size() + 2;      }   }   @Override   public boolean isViewFromObject(View view, Object object) {      return view == object;   }   @Override   public void destroyItem(ViewGroup container, int position, Object object) {      View view = mViews.get(position);      if(view != null)      {         container.removeView(view);      }      else      {         container.removeView((View) object);      }   }   @Override   public Object instantiateItem(ViewGroup container, int position) {      View view = mViews.get(position);      if(view == null)      {         view = mInflater.inflate(R.layout.bbs_picture_item, container, false);         mViews.put(position, view);      }      PicItem picItem = null;      if(mDatas.size() == 1)      {         picItem = mDatas.get(position);      }      else      {         if (position == 0) {            picItem = mDatas.get(mDatas.size() - 1);         } else if (position == (getCount() - 1)) {            picItem = mDatas.get(0);         } else {            picItem = mDatas.get(position - 1);         }      }      View frame = view.findViewById(R.id.fl_image_tag);      int padding = mDatas.size() <= 1 ? 0 : 1;      frame.setPadding(padding, padding, padding, padding);      setCover((ImageTagDragableLayout) view.findViewById(R.id.rl_image_tag), picItem, padding);      view.setId(position);      container.addView(view);      return view;   }}

转载于:https://my.oschina.net/bruces/blog/632766

你可能感兴趣的文章
D3.js data() 方法详解
查看>>
java实现帖子置顶的功能
查看>>
接口自动化测试平台-接入持续集成jenkins
查看>>
day-2 Python基础数据类型
查看>>
day-8 模块
查看>>
大三下学期第九周总结
查看>>
SVN关键字
查看>>
java.lang.NoSuchMethodError 报500
查看>>
Cmd find命令 和 findstr 命令
查看>>
linux添加环境变量
查看>>
vmware下的linux没有网络问题解决思路
查看>>
小程序如何引入阿里巴巴矢量图
查看>>
小程序flex布局,justify-content属性的应用
查看>>
经典博文
查看>>
CentOS7安装和使用squid代理
查看>>
ADC电流采集
查看>>
logstash启动失败的问题追查
查看>>
基于容器制作镜像
查看>>
js刷新页面的方法
查看>>
Vue-入门
查看>>