Android開発_慕课网_ViewPager切り替えアニメーション(バージョン3.0以上で効果あり)
25216 ワード
学習内容は「慕課網」から
一般的なアプリに入ると、何枚かの画像がナビゲーションされます.ここでは、この画像を切り替えるときにアニメーションを切り替える効果を追加する方法を学びます.
まずレイアウトファイルを見て
activity_main.layout
そしてjavaファイル
mainactivity.java
ここでコードは簡単で、主に1行のコード制御切替効果36行目のmviewpagerである.setPageTransformer(true, new ZoomOutPageTransformer());
2番目のパラメータは切り替え効果で、もちろん勝手なパラメータではありません
これらのパラメータはhttp://wear.techbrood.com/training/animation/screen-slide.htmlネットで調べた
コードは指定されており、パッケージをクリックして貼り付けるだけで対応するjavaファイルが生成されます.
ここでは、いくつかの効果を示します.
1、ZoomOutPageTransformer()
View Code
効果図:
赤は1枚目、青は2枚目、左にスライドして青を表示します.効果は2枚の図を並列に縮小するスライドです
2、DepthPageTransformer()
View Code
効果図:
赤は1枚目、青は2枚目、左にスライドして青を表示します.効果は赤で変化なしに左にスライドし、青は薄いから深いまで、小さいから大きいまでスクリーンを占有します.
注意:DepthPageTransformer()とZoomOutPageTransformer()javaファイルを追加する場合、ctrl+1の両方のエラーが簡単に解決できます
一般的なアプリに入ると、何枚かの画像がナビゲーションされます.ここでは、この画像を切り替えるときにアニメーションを切り替える効果を追加する方法を学びます.
まずレイアウトファイルを見て
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
効果図:
赤は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
効果図:
赤は1枚目、青は2枚目、左にスライドして青を表示します.効果は赤で変化なしに左にスライドし、青は薄いから深いまで、小さいから大きいまでスクリーンを占有します.
注意:DepthPageTransformer()とZoomOutPageTransformer()javaファイルを追加する場合、ctrl+1の両方のエラーが簡単に解決できます