Latest web development tutorials

transisi puing Android

Lollipop (Android 5.0) dan fragmen dari transisi aktif didasarkan pada beberapa fitur Android yang relatif baru yang disebut transisi. Dalam KitKat diperkenalkan, kerangka transisi menyediakan satu set API untuk memberikan animasi yang nyaman antara negara UI yang berbeda dari aplikasi. Kerangka ini dibangun di sekitar dua konsep kunci: adegan dan transisi. Adegan mendefinisikan UI aplikasi yang diberikan negara, transisi mendefinisikan perubahan animasi antara dua adegan.

Ketika perubahan adegan, transisi memiliki dua tanggung jawab utama:

  • Capture awal dan akhir setiap negara melihat adegan
  • Buat animator (Animator), berdasarkan dari satu adegan ke yang lain membutuhkan tampilan animasi yang berbeda.

contoh

Contoh ini menjelaskan cara menggunakan potongan-potongan transisi untuk membuat animasi kustom. Mari kita ikuti langkah-langkah berikut untuk memulai:

langkah deskripsi
1 Gunakan Android Studio untuk membuat sebuah aplikasi Android, bernama Fragment Custom Animation, paket bernama cn.uprogrammer.fragmentcustomanimation.
2 Memodifikasi file res / layout / activity_main.xml, tambahkan TextView
3 Buat fragment_stack.xml di res / layout / bawah file layout, mendefinisikan tombol label dan fragmen label
4 Membuat sub-anim di res / bawah, dan menambahkan fragment_slide_left.xml, fragment_slide_left_exit.xml, fragment_slide_right_exit.xml dan fragment_slide_left_enter.xml
5 MainActivity.java perlu menambahkan potongan dalam tumpukan, manajemen puing-puing dan onCreateView ()
6 Luncurkan emulator Android untuk menjalankan aplikasi dan memverifikasi hasil perubahan yang dibuat untuk aplikasi.

Berikut ini adalah isi dari res / layout / berkas activity_main.xml, yang berisi tata letak frame dan tombol.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/fragment1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <Button
        android:id="@+id/new_fragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加新碎片" />

</LinearLayout>

Berikut ini adalah res / anim / fragment_stack.xml berkas:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"/>
</LinearLayout>

Berikut ini adalah isi dari file res / animator / fragment_slide_left_enter.xml, yang berisi Metode pengaturan dan animator keberatan label.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="100dp" android:valueTo="0dp"
        android:valueType="floatType"
        android:propertyName="translationX"
        android:duration="@android:integer/config_mediumAnimTime" />

    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="0.0" android:valueTo="1.0"
        android:valueType="floatType"
        android:propertyName="alpha"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

Berikut ini adalah isi dari file res / animator / fragment_slide_left_exit.xml, yang berisi Metode pengaturan dan animator keberatan label.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="0dp" android:valueTo="-100dp"
        android:valueType="floatType"
        android:propertyName="translationX"
        android:duration="@android:integer/config_mediumAnimTime" />

    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="1.0" android:valueTo="0.0"
        android:valueType="floatType"
        android:propertyName="alpha"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

Berikut ini adalah isi dari file res / animator / fragment_slide_right_enter.xml, yang berisi Metode pengaturan dan animator keberatan label.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="-100dp" android:valueTo="0dp"
        android:valueType="floatType"
        android:propertyName="translationX"
        android:duration="@android:integer/config_mediumAnimTime" />

    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="0.0" android:valueTo="1.0"
        android:valueType="floatType"
        android:propertyName="alpha"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

Berikut ini adalah isi dari file res / animator / fragment_slide_right_exit.xml, yang berisi Metode pengaturan dan animator keberatan label.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="0dp" android:valueTo="100dp"
        android:valueType="floatType"
        android:propertyName="translationX"
        android:duration="@android:integer/config_mediumAnimTime" />

    <objectAnimator
        android:interpolator="@android:interpolator/decelerate_quint"
        android:valueFrom="1.0" android:valueTo="0.0"
        android:valueType="floatType"
        android:propertyName="alpha"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

Berikut ini adalah isi dari src / cn.uprogrammer.fragmentcustomanimation / MainActivity.java berkas berisi pendengar tombol, CountingFragment dan onCreateView ():

package cn.uprogrammer.fragmentcustomanimation;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;

import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

import android.widget.Button;
import android.widget.TextView;

/**
 * 演示在碎片事务中使用自定义动画.
 */
public class MainActivity extends Activity {
    int mStackLevel = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button)findViewById(R.id.new_fragment);

        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                addFragmentToStack();
            }
        });

        if (savedInstanceState == null) {
            // 添加初始碎片
            Fragment newFragment = CountingFragment.newInstance(mStackLevel);
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(R.id.fragment1, newFragment).commit();
        }
        else
        {
            mStackLevel = savedInstanceState.getInt("level");
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("level", mStackLevel);
    }

    void addFragmentToStack() {
        mStackLevel++;

        // 实例化新的碎片
        Fragment newFragment = CountingFragment.newInstance(mStackLevel);

        // 添加碎片到活动,并将其放入后退栈中
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.setCustomAnimations(R.animator.fragment_slide_left_enter,
                R.animator.fragment_slide_left_exit,
                R.animator.fragment_slide_right_enter,
                R.animator.fragment_slide_right_exit);
        ft.replace(R.id.fragment1, newFragment);
        ft.addToBackStack(null);
        ft.commit();
    }

    public static class CountingFragment extends Fragment {
        int mNum;
        /**
         * 创建CountingFragment的实例,提供"num"作为参数
         */
        static CountingFragment newInstance(int num) {
            CountingFragment f = new CountingFragment();

            Bundle args = new Bundle();
            args.putInt("num", num);
            f.setArguments(args);
            return f;
        }

        /**
         * 在创建时,获取实例的number参数.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mNum = getArguments() != null ? getArguments().getInt("num") : 1;
        }
        /**
         * 碎片的界面仅包含一个TextView,用于显示number
         */
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_stack, container, false);
            View tv = v.findViewById(R.id.text);
            ((TextView)tv).setText("Fragment #" + mNum);
            tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb));
            return v;
        }
    }
}

Berikut ini adalah isi dari file AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.fragmentcustomanimation"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

    </application>
</manifest>

Mari kita jalankan aplikasi dimodifikasi Fragment Custom Animation. Saya berasumsi bahwa Anda telah membuat AVD selama lingkungan instalasi. Buka proyek Anda dalam file yang aktif, klik pada toolbar gambar Icon untuk menjalankan aplikasi Dalam Android Studio. Android Studio menginstal aplikasi pada AVD dan mulai itu. Jika semua berjalan dengan baik, itu akan ditampilkan pada jendela emulator sebagai berikut:

gambar