web-dev-qa-db-ja.com

リストビューアイテムごとに翻訳アニメーションを作成する方法

getViewメソッドをオーバーライドしてデータを設定するリストビューがあります。ここで、リストの各アイテムをアニメーション化するか、画面の右側からアイテムが通常表示される左側に移動するようにします。

各アイテムのアニメーションは同時に開始しないでください。他のアイテムが移動する前に数ミリ秒遅延する必要があります...

まあ、これは私のアダプタクラスです:

public class MyAdapter extends ArrayAdapter<String>{

    private Context context;
    private String[] info;

    public MyAdapter(Context context, int resource,
            String[] objects) {
        super(context, resource, objects);
        // TODO Auto-generated constructor stub
        this.context = context;
        this.info = objects;

    }

    protected class RowViewHolder {
        public TextView text1;
        public CheckBox cb;
        public String ss;
    }

    @Override
    public View getView(int pos, View inView, ViewGroup parent) {
           View vix = inView;

           RowViewHolder holder;

           if (vix == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                vix = inflater.inflate(R.layout.check_list, null);
           }    
                holder = new RowViewHolder();

                holder.text1 = (TextView) vix.findViewById(R.id.info_group);
                holder.text1.setText(info[pos]);

                holder.ss = info[pos];

                holder.cb = (CheckBox) vix.findViewById(R.id.check);
                holder.cb.setTag(holder.ss);
                holder.cb.setOnCheckedChangeListener(CbListen);

                vix.setTag(holder);

           return vix;
    }

    private OnCheckedChangeListener CbListen = new OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(CompoundButton com, boolean pool) {
            // TODO Auto-generated method stub
            String state = (com.getTag()).toString();

            if(com.isChecked()){
                System.out.println(state+" CHECKED");
            }else{
                System.out.println(state+" UNCHECKED");
            }
        }
    };

}

何か案が? :)

[〜#〜] update [〜#〜]

まあ、確かにそうです! LOL:p

「Farhanが言ったことのように」それらのApiDemosをダウンロードするだけで、パッケージビューにLayoutAnimation2サンプルのようなものが見つかります。

そこでは、リストの各アイテムがアニメーション化されて、アルファがそれぞれ変化している間にtranslate-animationによって下向きに入力されます。

これが私の場合に私がすることです:

AnimationSet set = new AnimationSet(true);

    Animation animation = new AlphaAnimation(0.0f, 1.0f);
    animation.setDuration(500);
    set.addAnimation(animation);

    animation = new TranslateAnimation(
        Animation.RELATIVE_TO_SELF, 50.0f,Animation.RELATIVE_TO_SELF, 0.0f,
        Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f
    );
    animation.setDuration(1000);
    set.addAnimation(animation);

    LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f);

    group_list.setLayoutAnimation(controller);

これをsetAdapter()関数の下に配置します。加速、減速などの効果を使用して、より居心地の良い外観にすることができます。

:p

29
user724861

@ ser724861完璧な答えを出しました!!彼が提案したコードをどこに置くのか混乱していることに気付いたのですが...私はそのコードを私のListFragmentアクティビティに次のように入れました。

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);        

    AnimationSet set = new AnimationSet(true);
    Animation animation = new AlphaAnimation(0.0f, 1.0f);
    animation.setDuration(300);
    set.addAnimation(animation);

    /*animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 50.0f,
            Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
            0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
    animation.setDuration(10);
    set.addAnimation(animation); just comment if you don't want :) */ 
    LayoutAnimationController controller = new LayoutAnimationController(
            set, 0.5f);

    lv.setLayoutAnimation(controller);

    adapter = new LazyAdapter(getActivity(), numResults, nodes, tabType);
    setListAdapter(adapter);
}
7
Batta

LayoutAnimationsを使用する!

ドキュメントでは、 Android:layoutAnimation xmlattrを介して設定できます

ここを参照

3
Dori

各アイテムのアニメーションを同時に開始しないでください

必要に応じて、次のようなことができます。

layout_controller.xml:

<layoutAnimation xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:delay="30%"
Android:animation="@anim/scale" />

scale.xml:

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/accelerate_interpolator">
<scale
  Android:fromXScale="0.1"
  Android:toXScale="1"
  Android:fromYScale="0.1"
  Android:toYScale="1.0"
  Android:duration="800"
  Android:pivotX="10%"
  Android:pivotY="10%"
  Android:startOffset="100" />
</set>

そして、SetListAdapter()の後のJavaに、次のコードを貼り付けます。

LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(
 this, R.anim.layout_controller);
getListView().setLayoutAnimation(controller);

「Android:delay」を使用すると、アニメーションが前のアニメーションよりも遅れて開始されることに注意してください。

2
Milad Faridnia

getView()は、アクティビティの各アイテムにデータを入力します。 Timer を使用してgetViewにアニメーションを作成してみてください。

1
KhairiB
package com.Animation1;

import Android.app.ListActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.animation.Animation;
import Android.view.animation.AnimationUtils;
import Android.widget.ArrayAdapter;
import Android.widget.ListView;
import Android.widget.AdapterView;
import Java.util.ArrayList;

public class Animation1Activity extends ListActivity implements 
                                AdapterView.OnItemSelectedListener {
    Animation anim = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        anim = AnimationUtils.loadAnimation( this, R.anim.magnify );
        setContentView(R.layout.main);
        ListView v = getListView();     // set up item selection listener
        v.setOnItemSelectedListener( this );    // see OnItemSelectedListener methods below
        ArrayList<String> items = new ArrayList<String>();
        items.add( "Red" );
        items.add( "Grey" );
        items.add( "Cyan" );
        items.add( "Blue" );
        items.add( "Green" );
        items.add( "Yellow" );
        items.add( "Black" );
        items.add( "White" );
        ArrayAdapter itemsAdapter = new ArrayAdapter( this, R.layout.row, items );
        setListAdapter( itemsAdapter );
    }

    protected void onListItemClick(ListView l, 
                                    View v, 
                                    int position,
                                    long id) {
      v.startAnimation( anim );
    }

// --- AdapterView.OnItemSelectedListener methods --- 
    public void onItemSelected(AdapterView parent, 
            View v, 
            int position, 
            long id) {
      v.startAnimation( anim );
    }

    public void onNothingSelected(AdapterView parent) {}
}
1
Yasir

リストビューアクティビティの親レイアウトを追加するだけです

Android:animatelayoutchanges = "true"

楽しい!

0
Himanshu Goyal

ListViewのxml属性レイアウトアニメーションを使用してアニメーションを設定することもできます。 res/animフォルダーの下のxmlファイルを使用して任意のタイプのアニメーションを作成できます。他のリストビューで再利用したい場合や、コードを適切に管理したい場合に役立ちます。

Xmlでのアニメーションの作成に関してサポートが必要な場合はお知らせください。

0
Umair