Android開発_慕课网_ViewPager切り替えアニメーション(バージョン3.0以上で効果あり)

25216 ワード

学習内容は「慕課網」から
一般的なアプリに入ると、何枚かの画像がナビゲーションされます.ここでは、この画像を切り替えるときにアニメーションを切り替える効果を追加する方法を学びます.
まずレイアウトファイルを見て
activity_main.layout
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/frameLayout1"
    android:orientation="vertical">
    
</FrameLayout>

そしてjavaファイル
mainactivity.java
 1 package com.example.viewpage;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import android.os.Bundle;
 7 import android.app.Activity;
 8 import android.graphics.DashPathEffect;
 9 import android.support.v4.view.PagerAdapter;
10 import android.support.v4.view.ViewPager;
11 import android.text.style.SuperscriptSpan;
12 import android.view.Menu;
13 import android.view.View;
14 import android.view.ViewGroup;
15 import android.view.Window;
16 import android.widget.ArrayAdapter;
17 import android.widget.ImageView;
18 import android.widget.ImageView.ScaleType;
19 
20 public class MainActivity extends Activity {
21 
22     private ViewPager mviewpager; //  
23     private int[] mImgIds = new int[]{R.drawable.guide_image1,R.drawable.guide_image2,R.drawable.guide_image3};//     
24     private List<ImageView> mImages = new ArrayList<ImageView>();
25     
26     
27     
28     @Override
29     protected void onCreate(Bundle savedInstanceState) {
30         super.onCreate(savedInstanceState);
31         requestWindowFeature(Window.FEATURE_NO_TITLE);
32         setContentView(R.layout.activity_main);
33         
34         mviewpager = (ViewPager) findViewById(R.id.id_viewpager);
35         // ViewPage        (3.0          )
36         mviewpager.setPageTransformer(true, new ZoomOutPageTransformer());
37         
38         mviewpager.setAdapter(new PagerAdapter() {
39             
40             @Override
41             public Object instantiateItem(View container, int position) {
42                 ImageView imageview = new ImageView(MainActivity.this);
43                 imageview.setImageResource(mImgIds[position]);
44                 imageview.setScaleType(ScaleType.CENTER_CROP); //       
45                 ((ViewGroup) container).addView(imageview);
46                 mImages.add(imageview);
47                 return imageview;
48             };
49             @Override
50             public void destroyItem(View container, int position, Object object) {
51                 // TODO Auto-generated method stub
52                 
53                 ((ViewPager) container).removeView(mImages.get(position));
54             }
55             public boolean isViewFromObject(View view, Object object) {
56                 // TODO Auto-generated method stub
57                 return view == object;
58             }
59             
60             @Override
61             public int getCount() {                   //      
62                 // TODO Auto-generated method stub
63                 return mImgIds.length;
64             }
65         });
66     }
67 
68 
69     
70 }

ここでコードは簡単で、主に1行のコード制御切替効果36行目のmviewpagerである.setPageTransformer(true, new ZoomOutPageTransformer());
2番目のパラメータは切り替え効果で、もちろん勝手なパラメータではありません
これらのパラメータはhttp://wear.techbrood.com/training/animation/screen-slide.htmlネットで調べた
コードは指定されており、パッケージをクリックして貼り付けるだけで対応するjavaファイルが生成されます.
ここでは、いくつかの効果を示します.
1、ZoomOutPageTransformer()

 1 public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
 2     private static final float MIN_SCALE = 0.85f;
 3     private static final float MIN_ALPHA = 0.5f;
 4 
 5     public void transformPage(View view, float position) {
 6         int pageWidth = view.getWidth();
 7         int pageHeight = view.getHeight();
 8 
 9         if (position < -1) { // [-Infinity,-1)
10             // This page is way off-screen to the left.
11             view.setAlpha(0);
12 
13         } else if (position <= 1) { // [-1,1]
14             // Modify the default slide transition to shrink the page as well
15             float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
16             float vertMargin = pageHeight * (1 - scaleFactor) / 2;
17             float horzMargin = pageWidth * (1 - scaleFactor) / 2;
18             if (position < 0) {
19                 view.setTranslationX(horzMargin - vertMargin / 2);
20             } else {
21                 view.setTranslationX(-horzMargin + vertMargin / 2);
22             }
23 
24             // Scale the page down (between MIN_SCALE and 1)
25             view.setScaleX(scaleFactor);
26             view.setScaleY(scaleFactor);
27 
28             // Fade the page relative to its size.
29             view.setAlpha(MIN_ALPHA +
30                     (scaleFactor - MIN_SCALE) /
31                     (1 - MIN_SCALE) * (1 - MIN_ALPHA));
32 
33         } else { // (1,+Infinity]
34             // This page is way off-screen to the right.
35             view.setAlpha(0);
36         }
37     }
38 }

View Code
効果図:
安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)_第1张图片       安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)_第2张图片
赤は1枚目、青は2枚目、左にスライドして青を表示します.効果は2枚の図を並列に縮小するスライドです
2、DepthPageTransformer()

 1 public class DepthPageTransformer implements ViewPager.PageTransformer {
 2     private static final float MIN_SCALE = 0.75f;
 3 
 4     public void transformPage(View view, float position) {
 5         int pageWidth = view.getWidth();
 6 
 7         if (position < -1) { // [-Infinity,-1)
 8             // This page is way off-screen to the left.
 9             view.setAlpha(0);
10 
11         } else if (position <= 0) { // [-1,0]
12             // Use the default slide transition when moving to the left page
13             view.setAlpha(1);
14             view.setTranslationX(0);
15             view.setScaleX(1);
16             view.setScaleY(1);
17 
18         } else if (position <= 1) { // (0,1]
19             // Fade the page out.
20             view.setAlpha(1 - position);
21 
22             // Counteract the default slide transition
23             view.setTranslationX(pageWidth * -position);
24 
25             // Scale the page down (between MIN_SCALE and 1)
26             float scaleFactor = MIN_SCALE
27                     + (1 - MIN_SCALE) * (1 - Math.abs(position));
28             view.setScaleX(scaleFactor);
29             view.setScaleY(scaleFactor);
30 
31         } else { // (1,+Infinity]
32             // This page is way off-screen to the right.
33             view.setAlpha(0);
34         }
35     }
36 }

View Code
 
効果図:
安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)_第3张图片     安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)_第4张图片    安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)_第5张图片    
赤は1枚目、青は2枚目、左にスライドして青を表示します.効果は赤で変化なしに左にスライドし、青は薄いから深いまで、小さいから大きいまでスクリーンを占有します.
注意:DepthPageTransformer()とZoomOutPageTransformer()javaファイルを追加する場合、ctrl+1の両方のエラーが簡単に解決できます