2014-02-10 51 views
6

我想創建一個登錄頁面(如Facebook的Android應用程序),其中的用戶ID和密碼EditText字段被隱藏。頁面上會顯示一個徽標,該徽標可以在一定距離以上進行動畫並保留在新位置,然後顯示編輯字段。創建像Facebook一樣的登錄動畫android

這是我嘗試過的東西。但是這裏的標誌從頁面底部開始並移動到頁面的頂部。我希望標誌從頁面中間開始,並稍微向上移動到新的位置。

任何想法如何做到這一點>?

main.xml中

<ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="116dp" 
     android:src="@drawable/ic_launcher" /> 

RES /動畫/ animationfile.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator" > 

<translate 
    android:duration="5000" 
    android:fromYDelta="50%p" 
    android:toYDelta="-50%p" 
    /> 
    </set> 

Main.java

Animation translatebu= AnimationUtils.loadAnimation(this, R.anim.animationfile); 
     // tv.setText("Some text view."); 
     img.startAnimation(translatebu); 

回答

15

1日Facebook的圖像會,讓您獲得將其從當前位置翻譯至頂部

<translate 
    android:fromYDelta="0%p" 
    android:toYDelta="-30%p" 
    android:duration="1000" /> 

這裏android:fromYDelta是開始位置和android:toYDelta是結束位置的百分比,即-30%android:duration是時間,即1秒

第二現在附加一個偵聽檢查時,動畫完成 3現在淡出你的登錄框

這裏是代碼

MinActivity.java

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.Animation; 
import android.view.animation.Animation.AnimationListener; 
import android.view.animation.AnimationUtils; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button startAnimation =(Button) findViewById(R.id.button1); 
     final LinearLayout LoginBox = (LinearLayout) findViewById(R.id.LoginBox); 
     LoginBox.setVisibility(View.GONE); 
     startAnimation.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Animation animTranslate = AnimationUtils.loadAnimation(MainActivity.this, R.anim.translate); 
       animTranslate.setAnimationListener(new AnimationListener() { 

        @Override 
        public void onAnimationStart(Animation arg0) { } 

        @Override 
        public void onAnimationRepeat(Animation arg0) { } 

        @Override 
        public void onAnimationEnd(Animation arg0) { 
         LoginBox.setVisibility(View.VISIBLE); 
         Animation animFade = AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade); 
         LoginBox.startAnimation(animFade); 
        } 
       }); 
       ImageView imgLogo = (ImageView) findViewById(R.id.imageView1); 
       imgLogo.startAnimation(animTranslate); 

      } 
     }); 

    } 

} 

而在anim文件夾中使用這些XML的

fade.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" > 
    <alpha 
     android:duration="200" 
     android:fromAlpha="0.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:toAlpha="1.0" /> 

</set> 

translate.xml

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

    <translate 
     android:fromYDelta="0%p" 
     android:toYDelta="-30%p" 
     android:duration="1000" /> 
</set> 

而且佈局 activity_main.xml中

<RelativeLayout 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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="Start Animation" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:src="@drawable/ic_launcher" /> 

    <LinearLayout 
     android:id="@+id/LoginBox" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:orientation="vertical" > 

     <EditText 
      android:id="@+id/editText1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="Email ID" /> 

     <EditText 
      android:id="@+id/editText2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="Password" 
      android:inputType="textPassword" /> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Login" /> 

    </LinearLayout> 

</RelativeLayout> 
+0

這很好,但是如果我用WindowSoftInputMode = AdjustResize打開軟鍵盤,那麼圖像會丟失(因爲它在窗口之外進行翻譯)。你知道如何預防嗎? – Escobar5

+0

窗口調整大小以適應它,所以你不會找到鍵盤的高度,並根據屏幕高度,元素放置在內部等元素。然而,這將不得不優雅地完成,否則它會破壞美麗,所以它關乎如何你處理調整大小 –

0

如果你想在移動軟關鍵字時出現,然後就在清單文件中添加此在相應的活動整個佈局了。 "android:windowSoftInputMode="adjustResize"