<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/view_pager_box"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><android.support.v4.view.ViewPagerandroid:id="@+id/viewpager"android:layout_margin="10dp"android:layout_width="wrap_content"android:layout_height="120dp" /></LinearLayout>MainActivity 中相关 java 代码
import android.app.Activity;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ImageView.ScaleType;public class MainActivity extends Activity {private ViewPager viewPager;private int[] imageIds = new int[]{R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5,};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager = (ViewPager) findViewById(R.id.viewpager);viewPager.setOffscreenPageLimit(3); //设置内存中预加载页面数viewPager.setPageTransformer(true, new DepthPageTransformer()); //设置页面切换过渡动画viewPager.setAdapter(new PagerAdapter() {@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic int getCount() {return imageIds.length;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {ImageView imageView = new ImageView(MainActivity.this);imageView.setScaleType(ScaleType.CENTER_CROP);imageView.setImageResource(imageIds[position]);imageView.setTag(position); //设置标记container.addView(imageView);return imageView;}@Overridepublic void destroyItem(ViewGroup container, int position,Object object) {container.removeView((View)object);}});}}3.控制切换动画的类DepthPageTransformer的代码
import android.support.v4.view.ViewPager;import android.view.View;public class DepthPageTransformer implements ViewPager.PageTransformer {private static final float MIN_SCALE = 0.75f;@Overridepublic void transformPage(View view, float position) {android.util.Log.i("yuminfeng", "====view:" + view.getTag()+ ",position:" + position);int pageWidth = view.getWidth();if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left.view.setAlpha(0);} else if (position <= 0) { // [-1,0]// Use the default slide transition when moving to the left pageview.setAlpha(1);view.setTranslationX(0);view.setScaleX(1);view.setScaleY(1);} else if (position <= 1) { // (0,1]// Fade the page out.view.setAlpha(1 - position);// Counteract the default slide transitionview.setTranslationX(pageWidth * -position);// Scale the page down (between MIN_SCALE and 1)float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));view.setScaleX(scaleFactor);view.setScaleY(scaleFactor);} else { // (1,+Infinity]// This page is way off-screen to the right.view.setAlpha(0);}}}上面的代码十分简单,仅仅只是ViewPager的初始化配置,然后通过setPageTransformer设置页面切换动画。有一个细节还需要注意,设置setOffscreenPageLimit(3),表示内存中预加载页面为3,这三个页面是不可见的。如果加上当前显示的页面,总共初始化了4个页面。不设置的话,系统使用默认的预加载的页数为1。
我们还可以定制其他的动画效果,实现原理和上面一样,这里就不一一列出来了。
实现广告轮播效果图
如图:
实现上面的效果图,只需要对上面的代码进行一些修改即可:
想要在屏幕上出现多个页面,我们需要设置属性:android:clipChildren=”false”,该属性的意思是在View进行绘制的时候,不去裁切它们的显示范围,即不限制view的显示范围。
我们修改布局文件,如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/view_pager_box"android:layout_width="match_parent"android:layout_height="160dp"android:gravity="center"android:clipChildren="false"android:orientation="horizontal" ><android.support.v4.view.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_margin="30dp"android:layout_height="120dp" /></LinearLayout>在ViewPager的外面控件中设置了android:clipChildren=”false”,然后设置viewpager中android:layout_margin属性,留出间距,方便显示左右两边的图片。后面我们还要java代码设置viewpager的属性,如:
import android.support.v4.view.ViewPager;import android.view.View;public class AlphaScaleTransformer implements ViewPager.PageTransformer {private static final float DEFAULT_MIN_ALPHA = 0.5f;private float mMinAlpha = DEFAULT_MIN_ALPHA;private static final float DEFAULT_MIN_SCALE = 0.85f;private float mMinScale = DEFAULT_MIN_SCALE;public static final float DEFAULT_CENTER = 0.5f;@Overridepublic void transformPage(View view, float position) {int pageWidth = view.getWidth();int pageHeight = view.getHeight();view.setScaleX(0.999f);// hackview.setPivotY(pageHeight / 2);view.setPivotX(pageWidth / 2);if (position < -1) { // [-Infinity,-1)view.setAlpha(mMinAlpha);view.setScaleX(mMinScale);view.setScaleY(mMinScale);view.setPivotX(pageWidth);} else if (position <= 1) { // [-1,1]if (position < 0) // [0,-1]{ // [1,min]float factor = mMinAlpha + (1 - mMinAlpha) * (1 + position);float scaleFactor = (1 + position) * (1 - mMinScale) + mMinScale;view.setAlpha(factor);view.setScaleX(scaleFactor);view.setScaleY(scaleFactor);view.setPivotX(pageWidth * (DEFAULT_CENTER + (DEFAULT_CENTER * -position)));} else// [1,0]{// [min,1]float factor = mMinAlpha + (1 - mMinAlpha) * (1 - position);float scaleFactor = (1 - position) * (1 - mMinScale) + mMinScale;view.setAlpha(factor);view.setScaleX(scaleFactor);view.setScaleY(scaleFactor);view.setPivotX(pageWidth * ((1 - position) * DEFAULT_CENTER));}} else { // (1,+Infinity]view.setAlpha(mMinAlpha);view.setPivotX(0);view.setScaleX(mMinScale);view.setScaleY(mMinScale);}}}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。