package com.ztspeech.simutalk2.trans.speak;
import java.util.List;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import com.ztspeech.simutalk2.R;
public class AnimSmoothLvBaseAdapter extends BaseAdapter implements OnScrollListener {
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return null;
}
private Context context;
private List list;
private Animation sa;
private int currentapiVersion = 0;
private int scrollState;
public AnimSmoothLvBaseAdapter(Context context, List list, ListView lv) {
this.context = context;
this.list = list;
scrollState = list.size();
//sa = AnimationUtils.loadAnimation(context, R.anim.zoom_enter);
sa = AnimationUtils.loadAnimation(context, R.anim.wave_scale);
sa.setFillAfter(true);
currentapiVersion = Integer.valueOf(Build.VERSION.SDK);
lv.setOnScrollListener(this);
this.addFootView(lv);
}
private boolean isShowAnim = false;
public void startAnim(View view, int position) {
if (isShowAnim) {
if (position == list.size() - 1) {
view.startAnimation(sa);
isShowAnim = false;
}
}
}
public void clearCache(View convertView) {
convertView.clearAnimation();
}
public void notifyDataSetChanged(boolean isShowAnim) {
this.isShowAnim = isShowAnim;
super.notifyDataSetChanged();
}
public void addFootView(ListView lv) {
LinearLayout ll = new LinearLayout(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, context.getResources().getDimensionPixelSize(R.dimen.footerview_hight));
LinearLayout ll2 = new LinearLayout(context);
ll.addView(ll2, params);
//lv.addFooterView(ll);
lv.addFooterView(ll,null,false);
}
@SuppressLint("NewApi")
public void smoothToBottomWithAnim(ListView lv) {
if (currentapiVersion > 8) {
// ����һ ��ǰ��������20��ʱ���� ֱ���������
// ��bug �����������ת�����
if (list.size() - scrollState >= 5) {
lv.setSelection(list.size());
lv.setSelected(true);
} else {
lv.smoothScrollToPosition(list.size());
}
// ������ ����ǰ����ʱ����ж�������ǰ�����������Ŀֱ������
// if(list.size()-1-scrollState>20){
// lv.setSelection(list.size()-1);
// lv.setSelected(true);
// }else{
// lv.smoothScrollToPosition(list.size()-1);
// if(scrollState!=this.getCount()-1){
// lv.setSelection(list.size()-1);
// lv.setSelected(true);
// }
// }
} else {
lv.setSelection(list.size());
lv.setSelected(true);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
scrollState = firstVisibleItem + visibleItemCount - 1;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
}