web-dev-qa-db-ja.com

Androidアニメーションを使用してLinearLayoutを拡大

アニメーションを使用して画面にレイアウトを表示しようとしています。レイアウトは、高さが0から始まり、100%まで拡大するという考えです。

私はこれに本当に問題があり、いくつかの支援が必要です。何らかの理由でアニメーションは実行されません。

これが私のアニメーションXMLファイルです

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

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <scale
        Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
        Android:fromXScale="0.0"
        Android:toXScale="1"
        Android:fromYScale="1.0"
        Android:toYScale="1.0"
        Android:fillAfter="false"
         />

</set>

レイアウトファイルは非常に基本的で、次のように設計されています

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

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" xmlns:Android="http://schemas.Android.com/apk/res/Android">

<LinearLayout
        Android:id="@+id/dialog"
        Android:layout_width="wrap_content"
        Android:layout_height="200dp"
        Android:layout_centerHorizontal="true"
        Android:orientation="vertical"
        Android:layout_centerVertical="true"
        Android:background="@drawable/border">
    <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_horizontal"
            Android:text="Phone"
            Android:id="@+id/textView"/>
    <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_horizontal"
            Android:text="Address"
            Android:id="@+id/textView1"/>
    <Button Android:id="@+id/btn1"
            Android:layout_width="200dp"
            Android:layout_height="wrap_content"
            Android:text="Action 1"
            />
    <Button Android:id="@+id/btn2"
            Android:layout_width="200dp"
            Android:layout_height="wrap_content"
            Android:text="Action 2"
            />
</LinearLayout>
<Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Animate"
        Android:id="@+id/btnAnimate" Android:layout_alignParentLeft="true" Android:layout_alignParentTop="true"
        Android:onClick="animate"/>
</RelativeLayout>

私の活動コードも非常に基本的です

public class MyActivity extends Activity implements Animation.AnimationListener{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 }

public void animate(View view){
    LinearLayout dialog   = (LinearLayout)findViewById(R.id.dialog);
    dialog.setVisibility(LinearLayout.VISIBLE);
    Animation animation   =    AnimationUtils.loadAnimation(this, R.anim.anim);
    Log.i("animate","Begin Animation");
    animation.reset();
  //  animation.setFillAfter(true);
    animation.setAnimationListener(this);
    dialog.setAnimation(null);
    Log.i("animate","End Animation");
}

@Override
public void onAnimationStart(Animation animation) {
    //To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void onAnimationEnd(Animation animation) {
    //To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void onAnimationRepeat(Animation animation) {
    //To change body of implemented methods use File | Settings | File Templates.
}
}

ありがとうございました

15
svager

わかりました。

アニメーションXMLレイアウト

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

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
 Android:fillEnabled="true"
 Android:fillAfter="true">
 <scale

        Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
        Android:fromXScale="1.0"
        Android:toXScale="1.0"
        Android:fromYScale="0.0"
        Android:toYScale="1.0"
        Android:fillAfter="false"
         />

</set>

レイアウトXMLファイル

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

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <LinearLayout
        Android:id="@+id/dialog"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:orientation="vertical"
        Android:layout_centerVertical="true"
        Android:visibility="invisible"
        Android:background="@drawable/border">
    <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_horizontal"
            Android:text="Phone"
            Android:id="@+id/textView"/>
    <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_horizontal"
            Android:text="Address"
            Android:id="@+id/textView1"/>
    <Button Android:id="@+id/btn1"
            Android:layout_width="200dp"
            Android:layout_height="wrap_content"
            Android:text="Action 1"
            />
    <Button Android:id="@+id/btn2"
            Android:layout_width="200dp"
            Android:layout_height="wrap_content"
            Android:text="Action 2"
            />
   </LinearLayout>
   <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Animate"
        Android:id="@+id/btnAnimate" Android:layout_alignParentLeft="true" Android:layout_alignParentTop="true"
        Android:onClick="animate"/>
</RelativeLayout>

そして私の活動クラス

public class MyActivity extends Activity{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 }

public void animate(View view){
    LinearLayout dialog   = (LinearLayout)findViewById(R.id.dialog);
    dialog.setVisibility(LinearLayout.VISIBLE);
    Animation animation   =    AnimationUtils.loadAnimation(this, R.anim.anim);
    animation.setDuration(500);
    dialog.setAnimation(animation);
    dialog.animate();
    animation.start();
 }

}
24
svager

Android 3.0以降の最も簡単な方法は、子を追加するビューにこのプロパティを設定することです:

Android:animateLayoutChanges="true"

独自のアニメーションを作成することもできます。

カスタムレイアウトアニメーションを提供する場合は、LayoutTransitionオブジェクトを作成し、setLayoutTransition()メソッドを使用してレイアウトに提供します。

詳細については、次を参照してください: http://developer.Android.com/training/animation/layout.html#activity

6
teh.fonsi

Androidで拡大する線形レイアウトを設計する:

Mono Androidを使用している場合:

リソースの下にフォルダanimを作成します。

それから加えて animation.xml in anim folder(grow_anim1)

活動クラスでは次のように使用します:

(私の場合、私はフラグメントを使用しています)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Android.Views.Animations;
namespace BehnoudAndroidApp {
    public class StartPageFragment : Fragment{
        public override View OnCreateView(LayoutInflater p0, ViewGroup p1, Bundle p2){
            var rootView = p0.Inflate(Resource.Layout.StartPageLayout, p1, false);

            LinearLayout menu1 = rootView.FindViewById<LinearLayout>(Resource.Id.linearlayout1);

            Animation animation1 = AnimationUtils.LoadAnimation(this.Activity, Resource.Animation.grow_anim1);

            animation1.Duration = 5000;

            menu1.Click += delegate { menu1.StartAnimation(animation1); };

            return rootView;
        }
    }
}
2

アニメーションが始まらないようです。追加してみてください:

animation.start()
1
manutudescends