activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Animate"/> <ImageView android:id="@+id/img_rocket" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/rocket"/> <ImageView android:id="@+id/img_cloud" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/cloud"/> </FrameLayout> |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
package com.phaisarn.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.widget.ImageView; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; public class MainActivity extends AppCompatActivity { private int mScreenWidth; private int mScreenHeight; private ImageView mImgRocket; private ImageView mImgCloud; private int mRocketWidth; private int mRocketHeight; private int mCloudWidth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DisplayMetrics display = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(display); mScreenWidth = display.widthPixels; mScreenHeight = display.heightPixels; mImgRocket = (ImageView) findViewById(R.id.img_rocket); mImgCloud = (ImageView) findViewById(R.id.img_cloud); mImgRocket.post(new Runnable() { @Override public void run() { mRocketWidth = mImgRocket.getWidth(); mRocketHeight = mImgRocket.getHeight(); setRocketStartPosition(); } }); mImgCloud.post(new Runnable() { @Override public void run() { mCloudWidth = mImgCloud.getWidth(); setCloudStartPosition(); } }); //ให้จรวตเคลื่อนที่ในแนวแกน Y จากล่างขึ้นบน เป็นระยะทางเท่ากับความสูงของหน้าจอ final ObjectAnimator objectRocket = ObjectAnimator.ofFloat(mImgRocket, View.TRANSLATION_Y, -mScreenHeight); //ให้ก้อนเมฆเคลื่อนจากขวาไปซ้าย เป็นระยะเท่ากับความกว้างของหน้าจอ final ObjectAnimator objectCloud = ObjectAnimator.ofFloat(mImgCloud, View.TRANSLATION_X, -mScreenWidth); objectRocket.setDuration(5000); objectCloud.setDuration(6000); final AnimatorSet animSet = new AnimatorSet(); animSet.playTogether(objectRocket, objectCloud); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { animSet.start(); } }); //ดักอีเวนต์ onAnimationEnd เพื่อนำภาพกลับไปยังจุดเริ่มต้นเมื่อสิ้นสุดแอนนิเมชัน animSet.addListener(new Animator.AnimatorListener() { @Override public void onAnimationEnd(Animator animation) { setRocketStartPosition(); setCloudStartPosition(); } @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); } private void setRocketStartPosition() { //ให้จุดเริ่มต้นของจรวดอยู่กึ่งกลางด้านล่างของหน้าจอ mImgRocket.setX(mScreenWidth / 2 - mRocketWidth / 2); mImgRocket.setY(mScreenHeight - mRocketHeight - 225); } private void setCloudStartPosition() { //ให้จุดเริ่มต้นของเมฆอยู่ด้านขวาของหน้าจอ mImgCloud.setX(mScreenWidth - mCloudWidth); mImgCloud.setY(300); } } |
รูปที่ใช้