ViewPager动画效果

//自定义MyViewPager继承ViewPager

public class MyViewPager extends ViewPager{

private float mTrans;
private float mScale;
/**
* 最大的缩小比例
*/
private static final float SCALE_MAX = 0.5f;
//private static final String TAG = "MyJazzyViewPager";
/**
* 保存position与对于的View
*/
private HashMap<Integer, View> mChildrenViews = new LinkedHashMap<Integer, View>();
/**
* 滑动时左边的元素
*/
private View mLeft;
/**
* 滑动时右边的元素
*/
private View mRight;


public MyViewPager(Context context, AttributeSet attrs)
{
super(context, attrs);
}


@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels)
{


// Log.e(TAG, "position=" + position+", positionOffset = "+positionOffset+" ,positionOffsetPixels =  " + positionOffsetPixels+" , currentPos = " + getCurrentItem());

//滑动特别小的距离时,我们认为没有动,可有可无的判断
float effectOffset = isSmall(positionOffset) ? 0 : positionOffset;

//获取左边的View
mLeft = findViewFromObject(position);
//获取右边的View
mRight = findViewFromObject(position + 1);

// 添加切换动画效果
animateStack(mLeft, mRight, effectOffset, positionOffsetPixels);
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}


public void setObjectForPosition(View view, int position)
{
mChildrenViews.put(position, view);
}


/**
* 通过过位置获得对应的View

* @param position
* @return
*/
public View findViewFromObject(int position)
{
return mChildrenViews.get(position);
}


private boolean isSmall(float positionOffset)
{
return Math.abs(positionOffset) < 0.0001;
}


protected void animateStack(View left, View right, float effectOffset,
int positionOffsetPixels)
{
if (right != null)
{
/**
* 缩小比例 如果手指从右到左的滑动(切换到后一个):0.0~1.0,即从一半到最大
* 如果手指从左到右的滑动(切换到前一个):1.0~0,即从最大到一半
*/
mScale = (1 - SCALE_MAX) * effectOffset + SCALE_MAX;
/**
* x偏移量: 如果手指从右到左的滑动(切换到后一个):0-720 如果手指从左到右的滑动(切换到前一个):720-0
*/
mTrans = -getWidth() - getPageMargin() + positionOffsetPixels;
ViewHelper.setScaleX(right, mScale);
ViewHelper.setScaleY(right, mScale);
ViewHelper.setTranslationX(right, mTrans);
}
if (left != null)
{
left.bringToFront();
}
}


}


//MainActivity


public class MainActivity extends Activity {


private int[] mImgIds;
private MyViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImgIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c,
R.drawable.d, R.drawable.e, R.drawable.f};
mViewPager = (MyViewPager) findViewById(R.id.id_viewPager);
mViewPager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return mImgIds.length;
}


@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}


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


@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(mImgIds[position]);
imageView.setScaleType(ScaleType.CENTER_CROP);
container.addView(imageView);
mViewPager.setObjectForPosition(imageView, position);
return imageView;
}



});


}
}




//布局文件

<RelativeLayout 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=".MainActivity" >


    <com.example.jsqviewpager01.MyViewPager
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/id_viewPager" />


</RelativeLayout>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值