android viewpager切换动画效果,千变万化的ViewPager切换动画(2)--自定义ViewPager的实现方法...

本文介绍如何创建一个自定义的ViewPager——MyViewPagerTransformerAnim,通过该组件实现图片滑动时的动画效果。主要步骤包括:创建项目并设置默认布局,创建自定义View类处理动画逻辑,以及在MainActivity中初始化并设置适配器。通过这种方式,可以为应用的引导页或其他页面添加更丰富的视觉体验。
摘要由CSDN通过智能技术生成

(1)创建项目Viewpager_anim_myself 都采用默认的方式,添加三张图片资源文件,src-包目录下创建MyViewPagerTransformerAnim.java类

布局文件activity_main.xml如下:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

android:id="@+id/id_viewpager"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

编辑MainActivity.java

package com.lc.viewpager_anim;

import java.util.ArrayList;

import java.util.List;

import android.os.Bundle;

import android.app.Activity;

import android.support.v4.view.PagerAdapter;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.ImageView;

import android.widget.ImageView.ScaleType;

public class MainActivity extends Activity {

MyViewPagerTransformerAnim myViewPagerTransformerAnim;

private int[] mImgIds = new int[] { R.drawable.guide_image1,

R.drawable.guide_image2, R.drawable.guide_image3 };

private List mImages = new ArrayList();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

myViewPagerTransformerAnim = (MyViewPagerTransformerAnim) findViewById(R.id.id_viewpager);

// 添加适配器

myViewPagerTransformerAnim.setAdapter(new PagerAdapter() {

/**

* 初始化代码

*/

@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);

mImages.add(imageView);

// 初始化

myViewPagerTransformerAnim.setViewForPosition(imageView,

position);

return imageView;

}

@Override

public void destroyItem(ViewGroup container, int position,

Object object) {

container.removeView(mImages.get(position));

myViewPagerTransformerAnim.removeViewFromPosition(position); // remove

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

@Override

public int getCount() {

return mImgIds.length;

}

});

}

}

其中自定义的view如下所示:MyViewPagerTransformerAnim.java

package com.lc.viewpager_anim;

import java.util.HashMap;

import java.util.Map;

import com.nineoldandroids.view.ViewHelper;

import android.R.integer;

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

import android.util.Log;

import android.view.View;

/*

* 自定义viewpager实现动画切换效果:

*

* 1、需要拿到当前切换的两个view

*

* 2、一个动画的梯度值

*/

public class MyViewPagerTransformerAnim extends ViewPager {

private View mLeft;

private View mRight;

private float mTrans;

private float mScale;

private static final float MIN_SCALE = 0.6f;

private Map mChildren = new HashMap();

/*

* 要有两个构造方法

*/

public MyViewPagerTransformerAnim(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyViewPagerTransformerAnim(Context context) {

super(context);

}

/*

* 设置put的方法

*/

public void setViewForPosition(View view, int position) {

mChildren.put(position, view);

}

/*

* remove的方法

*/

public void removeViewFromPosition(Integer position) {

mChildren.remove(position);

}

/**

* 重写的方法

*/

@Override

protected void onPageScrolled(int position, float offset, int offsetPixels) {

// Log.e("TAG", "position =" + position + ",offset = " + offset);

mLeft = mChildren.get(position);

mRight = mChildren.get(position + 1);

animStack(mLeft, mRight, offset, offsetPixels);// 创建动画效果

super.onPageScrolled(position, offset, offsetPixels);

}

private void animStack(View left, View right, float offset, int offsetPixels) {

if (right != null) {

// 从0-1页,offset:0`1

mScale = (1 - MIN_SCALE) * offset + MIN_SCALE;

mTrans = -getWidth() - getPageMargin() + offsetPixels;

ViewHelper.setScaleX(right, mScale);

ViewHelper.setScaleY(right, mScale);

ViewHelper.setTranslationX(right, mTrans);

}

if (left != null) {

left.bringToFront();

}

}

}

完整项目代码如下:http://download.csdn.net/detail/u010870518/8469327

原文:http://blog.csdn.net/xlgen157387/article/details/44039529

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值