2015-02-03 4 views
1

내 문제 : 스크롤을 시작하면 항목이 내 ListView에 나타납니다. 마지막 항목이 아니며 애니메이션이 완료되어야합니다. 일단 문제가 사라지면 스크롤을 한 후에는 목록의 단일 항목에 한 번만 발생합니다.안드로이드 ListView 스크롤 후 애니메이션

ListView를 스크롤하기 시작한 후 어떻게 그 단일 항목의 애니메이션을 중단 할 수 있습니까?

항목을 어댑터에 추가 할 때 애니메이션이 한 번만 실행되기를 원합니다.

목록에 추가되는 항목에 애니메이션을 적용하는 목록 어댑터가 있습니다. 선언 된 애니메이터를 사용하여 어댑터의 getView() 메소드 왼쪽에서 항목을 슬라이드합니다. 다음은 애니메이션이 적용되는 getView() 메소드입니다.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
String listItemText = mList.get(position); 
ViewHolder holder = null; 

if (convertView == null) { 

    LayoutInflater li = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = li.inflate(R.layout.list_item, null); 

    holder = new ViewHolder(); 
    holder.mListItemText = (TextView) convertView.findViewById(R.id.progress_title); 
    Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.slide_in_left); 
    convertView.startAnimation(animation); 

    convertView.setTag(holder); 
} else { 
    holder = (ViewHolder) convertView.getTag(); 
} 

holder.mListItemText.setText(listItemText); 

return convertView; 
} 
private static class ViewHolder { 
    public TextView mListItemText; 

} 
+0

당신은 사용해야합니다 : 객체가 새로운 경우

public void initList() { /* Change your mList to get Bundle instead of String */ mList = new ArrayList<Bundle>(); } /* When you add an item you will put a bundle with your string and a flag that tell the item is new */ public void addItem(String item) { Bundle bundle = new Bundle(); bundle.putString("string", item); bundle.putBoolean("new", true); mList.add(bundle); } 

지금 확인 : 항목이 내가 이런 식으로 할 수 있습니다 새로운 경우

확인하려면 'ViewPropertyAnimator'를 대신 사용하십시오. 다음을 확인하십시오 : https://www.youtube.com/watch?v=8MIfSxgsHIs –

답변

2

convertView는 처음으로 목록을 만들려고 할 때 null입니다. 애니메이션은 첫 번째 항목과 첫 번째 항목에서만 시작됩니다.

예를 들어 플래그가 true로 설정된 경우 항목에 애니메이션을 적용하는 것이 좋습니다.

예 :

public View getView(int position, View convertView, ViewGroup parent)  { 
    Bundle item = mList.get(position); 
    ViewHolder holder = null; 

    if (convertView == null) { 

     LayoutInflater li = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = li.inflate(R.layout.list_item, null); 

     holder = new ViewHolder(); 
     holder.mListItemText = (TextView) convertView.findViewById(R.id.progress_title); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.mListItemText.setText(item.getString("string")); 

    if(item.getBoolean("new") == true) { 
     Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.slide_in_left); 
     convertView.startAnimation(animation); 
     item.setBoolean("new", false); 
    } 

    return convertView; 
} 
+0

이로 인해 상황이 크게 개선되었습니다. 이제 이전에 화면에서 벗어난 모든 항목을 스크롤 할 때 애니메이션이 적용됩니다. 그것은 단 하나의 무작위 아이템 애니메이션보다 훨씬 좋아 보입니다. 화면에 표시 될 때 애니메이션이 적용되지 않도록 화면에서 항목을 알리는 방법이 있습니까? –

+0

답변을 업데이트했습니다. –

+0

답변 됨 ... –

관련 문제