Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีใช้ ViewFlipper สำหรับ Animation เลื่อน View ใน Android

ภาพรวม

ตัวอย่างนี้สาธิตการใช้ ViewFlipper ซึ่งเป็น ViewGroup ที่แสดง Child View ทีละตัว (หนึ่งในเวลา) พร้อม Animation สำหรับการเลื่อน (Flip) ระหว่าง View ต่างๆ

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ Android ใหม่ใน Android Studio

ขั้นตอนที่ 2: ออกแบบ Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ViewFlipper
        android:id="@+id/viewFlipper"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:inAnimation="@android:anim/slide_in_left"
        android:outAnimation="@android:anim/slide_out_right">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/image"
            android:layout_gravity="center"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button View"
            android:textSize="48sp"
            android:textStyle="bold"
            android:layout_gravity="center"/>

    </ViewFlipper>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:layout_margin="16dp"
        android:onClick="previousView"
        android:text="ก่อนหน้า" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_margin="16dp"
        android:onClick="nextView"
        android:text="ถัดไป" />

</RelativeLayout>

ขั้นตอนที่ 3: Animation Resources (res/anim/)

สร้างโฟลเดอร์ res/anim/ แล้วสร้างไฟล์ 2 ไฟล์:

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="https://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="50%p"
        android:toXDelta="0" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="https://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="0"
        android:toXDelta="-50%p" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

ขั้นตอนที่ 4: เขียนโค้ด MainActivity (src/MainActivity.java)

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity {
    private ViewFlipper viewFlipper;

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

        viewFlipper = findViewById(R.id.viewFlipper);

        // เพิ่ม View แบบ Dynamic
        TextView textView = new TextView(this);
        textView.setText("Dynamically added TextView");
        textView.setGravity(Gravity.CENTER_HORIZONTAL);
        textView.setTextSize(32);
        textView.setPadding(50, 50, 50, 50);
        viewFlipper.addView(textView);

        // Auto-flipping ทุก 2 วินาที
        viewFlipper.setFlipInterval(2000);
        viewFlipper.startFlipping();
    }

    public void previousView(View v) {
        viewFlipper.setInAnimation(this, R.anim.slide_in_right);
        viewFlipper.setOutAnimation(this, R.anim.slide_out_left);
        viewFlipper.showPrevious();
    }

    public void nextView(View v) {
        viewFlipper.setInAnimation(this, android.R.anim.slide_in_left);
        viewFlipper.setOutAnimation(this, android.R.anim.slide_out_right);
        viewFlipper.showNext();
    }
}

ขั้นตอนที่ 5: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

ViewFlipper Methods ที่สำคัญ

Methodคำอธิบาย
showNext()แสดง View ถัดไป
showPrevious()แสดง View ก่อนหน้า
setDisplayedChild(int index)แสดง View ตาม Index (0-based)
startFlipping()เริ่ม Auto-flip ตาม setFlipInterval
stopFlipping()หยุด Auto-flip
setFlipInterval(int milliseconds)ตั้งค่าช่วงเวลาระหว่างการ Flip
addView(View child)เพิ่ม Child View แบบ Dynamic
removeView(View child)ลบ Child View

Built-in Animations

// Android built-in animations
android.R.anim.slide_in_left
android.R.anim.slide_out_right
android.R.anim.fade_in
android.R.anim.fade_out

การทดสอบ

รันแอป จะ Auto-flip ระหว่าง Image, Button, TextView ทุก 2 วินาที กดปุ่ม "ก่อนหน้า/ถัดไป" ควบคุมด้วยตนเอง

วิธีใช้ ViewFlipper สำหรับ Animation เลื่อน View ใน Android วิธีใช้ ViewFlipper สำหรับ Animation เลื่อน View ใน Android วิธีใช้ ViewFlipper สำหรับ Animation เลื่อน View ใน Android