实现点击项 动画上移效果,主Activity代码如下:
package com.lxy.movelistview;
import java.util.ArrayList;
import java.util.Collections;
import android.os.Bundle;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity implements OnItemClickListener {
private ListView listview;
private ArrayList<Data> datas; // 数据源
private MyAdapter adapter;
private boolean b = false; // 防止重复点击
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
adapter = new MyAdapter(15);
listview.setAdapter(adapter);
listview.setOnItemClickListener(this);
}
private void initData(int count) {
datas = new ArrayList<MainActivity.Data>();
for (int i = 0; i < count; i++) {
Data data = new Data();
data.setInfo("这是第" + i + "条数据");
datas.add(data);
}
}
/**
* 适配器
*
* @author Liuxy
* @2014-10-20下午2:53:33 </br>
*/
class MyAdapter extends BaseAdapter {
LayoutInflater inflater;
public MyAdapter(int count) {
initData(count);
inflater = LayoutInflater.from(MainActivity.this);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return datas.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
arg1 = inflater.inflate(R.layout.listview_item, null);
TextView tv = (TextView) arg1.findViewById(R.id.itme_text);
tv.setText(datas.get(arg0).getInfo());
return arg1;
}
}
/**
* 数据源
*
* @author Liuxy
* @2014-10-20下午2:53:03 </br>
*/
class Data {
private String info;
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, final int arg2,
long arg3) {
// TODO Auto-generated method stub
if (b) {
return;
}
b = true;
// 动画方向 及移动距离
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 0,
0 - (arg2 * view.getHeight()));
// 持续时间
if (arg2 > 5) {
translateAnimation.setDuration(900);
} else {
translateAnimation.setDuration(400);
}
// 设置
view.startAnimation(translateAnimation);
// 设置动画监听事件
translateAnimation.setAnimationListener(new AnimationListener() {
// 动画开始
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
// 动画结束
@Override
public void onAnimationEnd(Animation arg0) {
// 对数据源进行操作
Data a = datas.get(arg2);
datas.remove(arg2);
Collections.reverse(datas);
datas.add(a);
Collections.reverse(datas);
adapter.notifyDataSetChanged();
// 标识位可点击
b = false;
}
});
}
}