8

アクティビティ遷移の共有要素にスケールアップアニメーションを実装する場合は、linkのようにします。アクティビティ遷移時に共有要素にスケールアップアニメーションを実装する方法

しかし、この具体的な効果とそれを実装する方法については、適切なリファレンスが見つかりませんでした。これはカスタムのトランジションですか、デフォルトですか?多分誰でも、公式のドキュメントではなく、より詳細なチュートリアルを手伝ったり、投稿したりできます。

+1

チェックは素晴らしいです。これは役に立ちます。 https://github.com/nickbutcher/plaid – nshmura

+0

このチュートリアルを試してください:http://www.androidhive.info/2013/06/android-working-with-xml-animations/ –

+1

このhttps:// githubを試してください。 com/lgvalle/Material-Animations – KrishnaJ

答えて

6

を埋めるためにyourViewをスケーリングするため@Neoの答えのようなアニメーションを使用2つの活動間の移行。あなたは実際にどのビューも共有しませんし、どちらのアクティビティも独立したビューツリーを持ちます。しかし、ビューやサイズなどの共有要素に関する情報を新しいアクティビティに渡します。

起動時に、新しいアクティビティはすべてのビューを透過的にし、共有ビューを探します。起動アクティビティから渡された に一致するように属性が変更され、その単一のビューが表示されます。次に、共有ビューをこの状態からレイアウト内の自然な位置に遷移させるためにアニメーションを実行します。遷移が進むにつれて、ウィンドウの背景と残りの非共有要素は、完全に不透明になるまで、ゆっくりと にフェードインします。これらはすべて自動的に行われます。両方のアクティビティのレイアウトで

<ImageView 
... 
android:transitionName="@string/transition_photo" /> 

:共有セットとしてビューこのプロパティをマークするために今すぐ

。今

古い活動からあなたの新しい活動を開始する一方では、トランジションアニメーションを定義します。

Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(
            this, 
            sharedView, 
            sharedView.getTransitionName()) 
           .toBundle(); 
startActivity(intent,bundle); 

ます。また、移行のために複数のビューを指定することができます。異なるアプリケーション間で共有ビューを移行することもできます。デフォルトでは

使用されるアニメーションは、移動です:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> 
<changeBounds/> 
<changeTransform/> 
<changeClipBounds/> 
<changeImageTransform/> 
</transitionSet> 

しかし、あなたはまたのstyles.xmlにカスタムアニメーションを設定することができます。ここでは

<style name="AppTheme.Details"> 
    <item name="android:windowSharedElementEnterTransition">@transition/shared_photo</item> 
</style> 

は、共有要素の移行の実施例であります上記のように: https://github.com/anshchauhan/SharedElementTransition

0

XMLと使用後のコードでアニメーションを作成します。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    overridePendingTransition(animation_in, animation_out); 
} 

のres /アニメーション/ in.xml

<?xml version="1.0" encoding="utf-8"?> 
    <set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator"> 

    <scale 
     android:duration="700" 
     android:fillBefore="false" 
     android:fromXScale="0.0" 
     android:fromYScale="0.0" 
     android:toXScale="1.0" 
     android:toYScale="1.0" /> 
</set> 

のres /アニメーション/ out.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator"> 

    <scale 
     android:duration="700" 
     android:fillBefore="false" 
     android:fromXScale="1.0" 
     android:fromYScale="1.0" 
     android:toXScale="0.0" 
     android:toYScale="0.0" /> 
</set> 
+0

質問はどのようなアニメーションで同じ結果が得られるはずですか? – Datenshi

+0

@Datenshi、私の答えを更新しました。それがあなたを助けることを願って:) – Neo

0

https://www.youtube.com/watch?v=CPxkoe2MraA

このビデオでは、同じ結果を得る方法について説明しています。主なアイデアは

1)カスタムデフォルトのアニメーションを上書きする。ここで0はデフォルトでアニメーションが再生されないことを意味します。

overridePendingTransition(0, 0); 

2)翻訳し、それが完全に重なるように、あなたのGridViewの画像に第2の活性画像をスケーリングした後、元の位置およびスケールを移動するアクティビティのImageViewのにアニメーションを適用します。

は、共有要素の活動推移を見てください - https://guides.codepath.com/android/Shared-Element-Activity-Transition

0

1:ビューの仕様を見つける:

int[] location = new int[2]; 
view.getLocationOnScreen(location); 

int viewHeight = view.getHeight(); 
int viewWidth = view.getWidth(); 

2:透明アクティビティを作成し、新しい活動に

をトップ値を渡します3:新しいアクティビティにyourViewを追加し、次のようなことをしてください:

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) yourView.getLayoutParams(); 
layoutParams.topMargin = location[1]; 
layoutParams.leftMargin = location[0]; 
layoutParams.height = viewHeight; 
layoutParams.width = viewWidth; 
yourView.setLayoutParams(layoutParams); 

4:私は右ここにあなたの短いチュートリアルを挙げてみましょう:)

Shared element transition

あなたが実際にしたいことは、共有要素であるスクリーン

関連する問題