2016-03-24 18 views
2

私はカスタムlistviewを持っており、imageviewtextviewを含んでいます。 この場合、imageviewをクリックすると、animation(rotate)が始まります。 私の問題は次のとおりです。スクロールすると、アニメーションが停止しました。カスタムリストビューでアニメーションを開始する方法

public class AdapterFoodGroups extends BaseAdapter { 

    private static LayoutInflater mInflater = null; 

    Context context; 
    int[] foodImagesId; 
    String[] foodNameList; 
    String[] foodDescriptions; 
    int[] foodTimes; 

    boolean[] loadAnimation; 

    public AdapterFoodGroups(Context context, String[] foodNameList, String[] foodDescriptions, int[] foodTimes, int[] foodImagesId) { 
     // TODO Auto-generated constructor stub 
     this.foodNameList = foodNameList; 
     this.foodDescriptions = foodDescriptions; 
     this.foodTimes = foodTimes; 
     this.foodImagesId = foodImagesId; 
     this.context = context; 

     loadAnimation = new boolean[foodNameList.length]; 
     for (boolean b: loadAnimation) { 
     b = false; 
     } 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     final ViewHolder viewHolder; 

     final RotateAnimation anim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5 f, Animation.RELATIVE_TO_SELF, 0.5 f); 
     anim.setInterpolator(new LinearInterpolator()); 
     anim.setRepeatCount(Animation.INFINITE); 
     anim.setDuration(800); 

     if (convertView == null) { 

     mInflater = (LayoutInflater) context. 
     getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = mInflater.inflate(R.layout.adapter_foodgroup, null); 

     viewHolder = new ViewHolder(); 

     viewHolder.txtFoodName = (TextView) convertView.findViewById(R.id.txtFoodNameGrid); 
     viewHolder.txtFoodDescription = (TextView) convertView.findViewById(R.id.txtFoodDescriptionGrid); 
     viewHolder.txtFoodTime = (TextView) convertView.findViewById(R.id.txtFoodTimeGrid); 
     viewHolder.ivFoodImage = (CircularImageView) convertView.findViewById(R.id.ivFoodImageGrid); 
     viewHolder.ivLoad = (ImageView) convertView.findViewById(R.id.ivLoad); 

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

     if (this.foodImagesId[position] != 0) { 
     viewHolder.ivFoodImage.setImageResource(this.foodImagesId[position]); 
     viewHolder.ivFoodImage.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(context, String.valueOf(position) + " = " + foodNameList[position], Toast.LENGTH_LONG).show(); 
      } 
     }); 
     } 
     if (this.foodNameList[position] != null) { 
     viewHolder.txtFoodName.setText(this.foodNameList[position]); 
     } 
     if (this.foodDescriptions[position] != null) { 
     viewHolder.txtFoodDescription.setText(this.foodDescriptions[position]); 
     } 
     if (this.foodTimes[position] != 0) { 
     viewHolder.txtFoodTime.setText(String.valueOf(this.foodTimes[position]) + " دقیقه"); 
     } 

     viewHolder.ivLoad.setImageResource(R.drawable.load); 
     viewHolder.ivLoad.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      viewHolder.ivLoad.setAnimation(anim); 
      viewHolder.ivLoad.startAnimation(anim); 
     } 
     }); 

     return convertView; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return foodNameList.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public static class ViewHolder { 
     public CircularImageView ivFoodImage; 
     public ImageView ivLoad; 
     public TextView txtFoodName; 
     public TextView txtFoodDescription; 
     public TextView txtFoodTime; 
    } 
} 

答えて

1

これを試してください:あなたのアダプタのコンストラクタで

は、これらの行を変更:getView()方法で

.... 
loadAnimation = new boolean[foodNameList.length]; 
     for (int i=0; i < loadAnimation.length; i++) { 
      loadAnimation[i] = false; 
     } 
.... 

は、これを追加します。

... 

      viewHolder.ivLoad.setImageResource(R.drawable.load); 

      if(loadAnimation[position]){ 
       viewHolder.ivLoad.setAnimation(anim); 
       viewHolder.ivLoad.startAnimation(anim); 
      } else { 
       viewHolder.ivLoad.setAnimation(null); 
      } 

      viewHolder.ivLoad.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        viewHolder.ivLoad.setAnimation(anim); 
        viewHolder.ivLoad.startAnimation(anim); 
        loadAnimation[position] = true; 

       } 
      }); 

... 

はそれが役に立てば幸い!

+0

こんにちは、私の友人。私はこれをするが、働かない。 –

+0

あなたのコードを試してみましたが、実際に問題がありました。私は私の答えを編集して、今それは私のために働く。それを試して、それがあなたのために働くかどうかを教えてください –

+0

非常に非常に非常に感謝...非常に非常に非常に有用....非常にありがとう –

関連する問題