2014-02-10 31 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"