Android 滚动gridview时淡入/淡出动画选择器出现问题
我在滚动gridview时遇到问题,因为在滚动过程中,高亮显示选定单元格的选择器也出现在其他单元格中(有一段时间)。在我将Android 滚动gridview时淡入/淡出动画选择器出现问题,android,animation,gridview,Android,Animation,Gridview,我在滚动gridview时遇到问题,因为在滚动过程中,高亮显示选定单元格的选择器也出现在其他单元格中(有一段时间)。在我将fadeIn和fadeOut动画添加到此选择器后,问题就开始了,但我确实希望让动画更平滑地过渡 此网格的适配器代码为: public class GridAdapter extends BaseAdapter { private Context ctx; private List<Model> modelList; public Gri
fadeIn
和fadeOut
动画添加到此选择器后,问题就开始了,但我确实希望让动画更平滑地过渡
此网格的适配器代码为:
public class GridAdapter extends BaseAdapter {
private Context ctx;
private List<Model> modelList;
public GridAdapter(Context ctx, List<Model> modelList) {
this.ctx = ctx;
this.modelList = modelList;
}
@Override
public int getCount() {
return modelList != null ? modelList.size() : 0;
}
@Override
public Object getItem(int pos) {
return modelList.get(pos);
}
@Override
public long getItemId(int pos) {
return pos;
}
@Override
public View getView(int pos, View view, ViewGroup viewGroup) {
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = LayoutInflater.from(ctx).inflate(R.layout.grid_cell, viewGroup, false);
holder.gridCell = (TextView) view.findViewById(R.id.grid_cell);
holder.cellSelected = (TextView) view.findViewById(R.id.cell_selected);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
Model model = modelList.get(pos);
holder.gridCell.setBackgroundResource(model.getBackId());
holder.gridCell.setText(model.getLabel());
if (model.isSelected()) {
//fade In
holder.cellSelected.setBackgroundResource(R.drawable.grid_selector);
holder.cellSelected.setVisibility(View.VISIBLE);
holder.cellSelected.animate().setDuration(1000).alpha(1.0f).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
holder.cellSelected.setAlpha(1.0f);
holder.cellSelected.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
}).start();
} else {
//fade out
holder.cellSelected.animate().setDuration(1000).alpha(0.0f).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
holder.cellSelected.setBackgroundResource(0);
holder.cellSelected.setAlpha(0.0f);
holder.cellSelected.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
}).start();
}
return view;
}
private class ViewHolder {
TextView gridCell;
TextView cellSelected;
}
}
公共类GridAdapter扩展BaseAdapter{
私有上下文ctx;
私有列表模型列表;
公共GridAdapter(上下文ctx,列表modelList){
this.ctx=ctx;
this.modelList=modelList;
}
@凌驾
public int getCount(){
返回modelList!=null?modelList.size():0;
}
@凌驾
公共对象getItem(int-pos){
返回modelList.get(pos);
}
@凌驾
公共长getItemId(int-pos){
返回pos;
}
@凌驾
公共视图getView(内部位置、视图视图、视图组视图组){
最终持票人;
如果(视图==null){
holder=新的ViewHolder();
视图=LayoutFlater.from(ctx).充气(R.layout.grid_单元格,视图组,false);
holder.gridCell=(TextView)view.findViewById(R.id.grid\u cell);
holder.cellSelected=(TextView)view.findViewById(R.id.cell\u selected);
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
模型=模型列表.get(pos);
setBackgroundResource(model.getBackId());
holder.gridCell.setText(model.getLabel());
if(model.isSelected()){
//淡入
holder.cellSelected.setBackgroundResource(R.drawable.grid_选择器);
holder.cellSelected.setVisibility(View.VISIBLE);
holder.cellSelected.animate().setDuration(1000).alpha(1.0f).setListener(新的Animator.AnimatorListener()){
@凌驾
AnimationStart上的公共无效(Animator Animator){
}
@凌驾
AnimationEnd上的公共无效(Animator Animator){
支架。选定单元。setAlpha(1.0f);
holder.cellSelected.setVisibility(View.VISIBLE);
}
@凌驾
AnimationCancel上的公共无效(Animator Animator){
}
@凌驾
AnimationRepeat上的公共无效(Animator Animator){
}
}).start();
}否则{
//淡出
holder.cellSelected.animate().setDuration(1000).alpha(0.0f).setListener(新的Animator.AnimatorListener()){
@凌驾
AnimationStart上的公共无效(Animator Animator){
}
@凌驾
AnimationEnd上的公共无效(Animator Animator){
holder.cellSelected.setBackgroundResource(0);
保持架。选定单元格。设置Alpha(0.0f);
holder.cellSelected.setVisibility(视图.不可见);
}
@凌驾
AnimationCancel上的公共无效(Animator Animator){
}
@凌驾
AnimationRepeat上的公共无效(Animator Animator){
}
}).start();
}
返回视图;
}
私有类视窗持有者{
文本视图网格单元;
选择文本视图单元;
}
}
任何人都知道我必须改变什么来阻止选择器在其他单元格中的错误显示(不选择)
有什么建议吗
注意-fadeIn和fadeOut都适用于必须选择的单元格,唯一的问题是在滚动期间,一些应暂时取消选择的单元格也会设置动画
编辑-事实上,我认为问题在于如何在网格上回收视图,但我不知道如何解决。拜托,这是这个项目唯一缺少的东西
谢谢