2016-12-16 3 views
2

У меня есть список. Я хочу добавить одну анимацию, которая будет, если я выберу один элемент списка, тогда он будет удален, а остальные элементы ниже этого элемента будут сдвинуты с помощью анимации слайдов. Я сделал это с линейной компоновкой, получив свою дочернюю позицию, но я не могу понять, как продвигать элементы списка listview. Пожалуйста, помогитеСдвинуть анимацию для выбранных элементов списка просмотров

Ниже мой код для анимации в динамически созданной линейной компоновки

plus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      Animation animation1 = AnimationUtils.loadAnimation(getActivity(), R.anim.move); 
      final Animation animation2 = AnimationUtils.loadAnimation(getActivity(), R.anim.moveup); 

это анимация этого элемента, на котором мы щелкаем

  lay1.startAnimation(animation1); 

это код анимация отдыха ребенка для продвижения вверх

  final int i = lay1.getId() + 1; 


      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        //Do something after 100ms 

        try { 
         LinearLayout l = (LinearLayout)      layoutall.getChildAt(i); 
         l.startAnimation(animation2); 
         layoutall.removeView(lay1); 
        } catch (Exception e) { 

         //connectToDatabase(); 
        } 
       } 
      }, 600); 

Обновленный Код Большое спасибо. Я смог реализовать эту функциональность, но проблема в том, что я использовал две анимации в одном списке, но не смог реализовать первую анимацию.

Мой код для элемента списка, к которому я хочу ударить слева, а на для анимации нажмите

 viewHolder.accept.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       removeListItem(viewHolder.order_card_layout, position); 

      } 
     }); 

И код

 protected void removeListItem(final View rowView, final int positon) { 
    // TODO Auto-generated method stub 


    final Animation animation = AnimationUtils.loadAnimation(rowView.getContext(), R.anim.move); 
    rowView.startAnimation(animation); 

    Animation.AnimationListener al = new Animation.AnimationListener() { 
     @Override 
     public void onAnimationEnd(Animation arg0) { 

      ViewHolder vh = (ViewHolder) rowView.getTag(); 
      //vh.needInflate = true; 

     } 
     @Override public void onAnimationRepeat(Animation animation) {} 
     @Override public void onAnimationStart(Animation animation) {} 
    }; 


    collapse(rowView, al); 

}

но проблема в том, что моя первая анимация не работает, а слайд справа

final Animation animation = AnimationUtils.loadAnimation(rowView.getContext(), R.anim.move); 
    rowView.startAnimation(animation); 

Нового обновленный код Я был в состоянии реализовать эту функциональность, но проблема в том, что я использовал две анимацию и хочу сделать первую анимацию по этому пункту, которого я нажимаю и другую анимацию по всем пунктам списка ниже того, что щелкнуло item.But моя проблема в том, что элемент, на который я нажал слайд справа, а также он появляется и перемещается вверх со списком цели, но я хочу, чтобы элемент, на который я нажимаю, будет правым слайдом, а остальное будет скользить вверх.

Мой код для элемента списка, к которому я хочу ударить слева, а на для анимации нажмите

 viewHolder.accept.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       removeListItem(viewHolder.order_card_layout, position); 

      } 
     }); 

И код

защищен недействительным removeListItem (окончательный View rowView, окончательное ИНТ positon) {// TODO автоматическая генерация метод заглушки

final Animation animation = AnimationUtils.loadAnimation(rowView.getContext(), R.anim.move); 
    rowView.startAnimation(animation); 


    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //Do something after 100ms 

      try { 


       Animation.AnimationListener al = new Animation.AnimationListener() { 
        @Override 
        public void onAnimationEnd(Animation arg0) { 

         ViewHolder vh = (ViewHolder) rowView.getTag(); 
         //vh.needInflate = true; 

        } 

        @Override 
        public void onAnimationRepeat(Animation animation) { 
        } 

        @Override 
        public void onAnimationStart(Animation animation) { 
        } 
       }; 


       collapse(rowView, al); 


      } catch (Exception e) { 

       //connectToDatabase(); 
      } 
     } 
    }, 600); 





} 






      private void collapse(final View v, Animation.AnimationListener al) { 
    final int initialHeight = v.getMeasuredHeight(); 

    Animation anim = new Animation() { 
     @Override 
     protected void applyTransformation(float interpolatedTime, Transformation t) { 
      if (interpolatedTime == 1) { 
       v.setVisibility(View.GONE); 
      } 
      else { 
       v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); 
       v.requestLayout(); 
      } 
     } 

     @Override 
     public boolean willChangeBounds() { 
      return true; 
     } 
    }; 

    if (al!=null) { 
     anim.setAnimationListener(al); 
    } 
    anim.setDuration(600); 
    v.startAnimation(anim); 
} 

ответ

1

Вот код связан с вашим требованием, попробуйте этот

https://github.com/paraches/ListViewCellDeleteAnimation

Скачать код и запустить его.

, если вы хотите увидеть демонстрацию, чем увидеть это видео,

http://www.youtube.com/watch?v=bOl5MIti7n0

+0

Большое спасибо. Я смог реализовать эту функциональность, но проблема в том, что я использовал две анимации в одном списке, но не смог реализовать первую анимацию. Мой код: –

0

Вот код, где я реализую как анимацию.

1) Слайд справа при щелчке по элементу списка.

2) при нажатии кнопки «Удалить», слайд-анимация для оставшихся строк в представлении списка (это уже сделано в ссылке, которую я дал).

Скопируйте ниже файлы в свою папку с анимацией.

1) fade_out.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <alpha 
     android:duration="700" 
     android:fromAlpha="1" 
     android:toAlpha="0" /> 
</set> 

2) fade_in.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <alpha 
     android:duration="700" 
     android:fromAlpha="0" 
     android:toAlpha="1" /> 
</set> 

3) slide_in_right.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:duration="700" 
     android:fromXDelta="100%" 
     android:toXDelta="0%" /> 
</set> 

4) slide_out_right.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:duration="700" 
     android:fromXDelta="0%" 
     android:toXDelta="100%" /> 
</set> 

Теперь добавьте ниже методов и класса к вашей деятельности,

//Animation 
    private void fadeOutView(View view) { 
     Animation fadeOut = AnimationUtils.loadAnimation(view.getContext(), R.anim.fade_out); 
     if (fadeOut != null) { 
      fadeOut.setAnimationListener(new ViewAnimationListener(view) { 
       @Override 
       protected void onAnimationStart(View view, Animation animation) { 

       } 

       @Override 
       protected void onAnimationEnd(View view, Animation animation) { 
        view.setVisibility(View.GONE); 
       } 
      }); 
      view.startAnimation(fadeOut); 
     } 
    } 

    private void fadeInView(View view) { 
     Animation fadeIn = AnimationUtils.loadAnimation(view.getContext(), R.anim.fade_in); 
     if (fadeIn != null) { 
      fadeIn.setAnimationListener(new ViewAnimationListener(view) { 
       @Override 
       protected void onAnimationStart(View view, Animation animation) { 
        view.setVisibility(View.VISIBLE); 
       } 

       @Override 
       protected void onAnimationEnd(View view, Animation animation) { 

       } 
      }); 
      view.startAnimation(fadeIn); 
     } 
    } 

    private void slideInView(View view) { 
     Animation slideIn = AnimationUtils.loadAnimation(view.getContext(), R.anim.slide_in_right); 
     if (slideIn != null) { 
      slideIn.setAnimationListener(new ViewAnimationListener(view) { 
       @Override 
       protected void onAnimationStart(View view, Animation animation) { 
        view.setVisibility(View.VISIBLE); 
       } 

       @Override 
       protected void onAnimationEnd(View view, Animation animation) { 

       } 
      }); 
      view.startAnimation(slideIn); 
     } 
    } 

    private void slideOutView(View view) { 
     Animation slideOut = AnimationUtils.loadAnimation(view.getContext(), R.anim.slide_out_right); 
     if (slideOut != null) { 
      slideOut.setAnimationListener(new ViewAnimationListener(view) { 
       @Override 
       protected void onAnimationStart(View view, Animation animation) { 

       } 

       @Override 
       protected void onAnimationEnd(View view, Animation animation) { 
        view.setVisibility(View.GONE); 
       } 
      }); 
      view.startAnimation(slideOut); 
     } 
    } 

    private abstract class ViewAnimationListener implements Animation.AnimationListener { 

     private final View view; 

     protected ViewAnimationListener(View view) { 
      this.view = view; 
     } 

     @Override 
     public void onAnimationStart(Animation animation) { 
      onAnimationStart(this.view, animation); 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      onAnimationEnd(this.view, animation); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 

     protected abstract void onAnimationStart(View view, Animation animation); 

     protected abstract void onAnimationEnd(View view, Animation animation); 
    } 

Теперь, если вы хотите отобразить анимацию элемента списка Нажмите затем, оживляют в Класс адаптера, в котором вы раздуваете raw_layout для listView.

5) raw_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:id="@+id/linLayout"> 

    <ImageButton 
     android:id="@+id/cell_trash_button" 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     android:src="@drawable/trash_can" 
     android:scaleType="fitXY" /> 

    <TextView 
     android:id="@+id/cell_name_textview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical|left" 
     android:layout_marginLeft="16dp" 
     android:layout_weight="1" 
     android:text="cell name" /> 

</LinearLayout> 

6) наконец Применить анимацию на Материнской Макет raw_layout в GetView() метод адаптера OnClick родителя Layout.Here Мой родительский компоновщик для raw_layout является LinearLayout которые имеют идентификатор с именем linLayout.

vh.linLayout.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if (vh.linLayout.getVisibility() == View.VISIBLE) { 
         fadeOutView(vh.linLayout); 
         slideInView(vh.linLayout); 
        } else { 
         fadeInView(vh.linLayout); 
         slideOutView(vh.linLayout); 
        } 
       } 
      }); 

Я пробовал это и его работу. Так что попробуйте это один раз!

+0

Нет, это не работает –

+0

напишите свой код. –

+0

уже опубликовано, что я разместил выше. Это мой код. и ваш код не работает так, как мне нужно –

Смежные вопросы