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
@ 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);
}
各アイテムのアニメーションを同時に開始しないでください
必要に応じて、次のようなことができます。
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」を使用すると、アニメーションが前のアニメーションよりも遅れて開始されることに注意してください。
getView()は、アクティビティの各アイテムにデータを入力します。 Timer を使用してgetViewにアニメーションを作成してみてください。
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) {}
}
リストビューアクティビティの親レイアウトを追加するだけです
Android:animatelayoutchanges = "true"
楽しい!
ListViewのxml属性レイアウトアニメーションを使用してアニメーションを設定することもできます。 res/animフォルダーの下のxmlファイルを使用して任意のタイプのアニメーションを作成できます。他のリストビューで再利用したい場合や、コードを適切に管理したい場合に役立ちます。
Xmlでのアニメーションの作成に関してサポートが必要な場合はお知らせください。