2012-01-20 1 views
0

Мое приложение содержит ViewFlipper с большим количеством изображений. Это автоматическое копирование изображений с использованием некоторых анимаций. Я хочу, чтобы при отображении определенного изображения ViewFlipper переставал скользить, изображение заменялось другим изображением, а затем ViewFlipper, чтобы снова начать переворачивание. Я потратил много времени на это, но он не работает. Я попытался заменить представление и добавить новое представление, но приложение не работает, как оно должно работать. Кто-нибудь работал с ViewFlipper? Кто-нибудь знает, как заменить представление новым?Как заменить вид другим в ViewFlipper

Вот мой код:

vf = (ViewFlipper) findViewById(R.id.details); 
vf.setFlipInterval(Integer.valueOf(3 * 1000)); 

//populate the ViewFlipper with images 

vf.setOutAnimation(animFlipOutNext); 
vf.setInAnimation(animFlipInNext); 
vf.setAutoStart(true); 

анимаций, которые я использовал:

animFlipInNext = AnimationUtils 
       .loadAnimation(this, R.anim.push_left_in); 
     animFlipInNext.setDuration(2000); 
     animFlipInNext.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
       System.out.println("AnimStart- LeftIn" + " Will be displayed " 
         + vf.getDisplayedChild()); 
       imageName = images.listFiles(); 

       for (int i = 0; i < imageName.length; i++) { 
        if (vf.getCurrentView().getTag().toString() 
          .equalsIgnoreCase(imageName[i].getName())) { 
         System.out.println("begin " + imageName[i].getName()); 
         vf.stopFlipping(); 

        } else 
         System.out.println("NUNUNU"); 

       } 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
       System.out.println("AnimRepeat-LeftIn"); 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       System.out.println("Anim end " + vf.getDisplayedChild()); 
       for (int i = 0; i < imageName.length; i++) { 
        if (vf.getCurrentView().getTag().toString() 
          .equalsIgnoreCase(imageName[i].getName())) { 
         System.out.println("begin " + imageName[i].getName()); 
         videoname = imageName[i].getName().replace("1.jpg", ""); 
         System.out.println("VideoName este " + videoname 
           + ".mp4"); 

         bitmap = BitmapFactory.decodeFile(Environment 
           .getExternalStorageDirectory() 

         + "/Images" + "/" + "23Video1.jpg"); 
         img = new ImageView(getBaseContext()); 
         img.setImageBitmap(bitmap); 
         img.setScaleType(ImageView.ScaleType.FIT_XY); 
         int nr = vf.getDisplayedChild(); 
         System.out.println("nr view "+nr); 

         vf.removeViewAt(nr); 

         vf.addView(img, nr,new LayoutParams(LayoutParams.FILL_PARENT, 
           LayoutParams.FILL_PARENT)); 
         vf.setDisplayedChild(nr); 
         vf.setVisibility(View.VISIBLE); 
         img=null; 
         //vf.setDisplayedChild(nr); 

        } 
       } 
      } 
     }); 

     animFlipOutNext = AnimationUtils.loadAnimation(this, 
       R.anim.push_left_out); 
     animFlipOutNext.setDuration(2000); 

     animFlipInPrevious = AnimationUtils.loadAnimation(this, 
       R.anim.push_right_in); 
     animFlipInPrevious.setDuration(2000); 

     animFlipOutPrevious = AnimationUtils.loadAnimation(this, 
       R.anim.push_right_out); 
     animFlipOutPrevious.setDuration(2000); 

Я пытаюсь заменить вид на onAnimationEnd метод. Пожалуйста, помогите .. Любая идея приветствуется.

ответ

0

ViewFlipper имеет методы showNext и showPrevious, чей мы можем изменить текущий отображаемый дочерний элемент, чтобы получить текущий отображаемый дочерний элемент, используйте getDisplayedChild, который вернет индекс текущего отображаемого дочернего элемента.

Просто используйте следующий метод для отображения элемента п-й:

private void display(int n) 
{ 
    int index=viewFlipper.getDisplayedChild(); 
    while(n<index) 
    { 
     viewFlipper.showPrevious(); 
     index--; 
    } 
    while(n>index) 
    { 
     viewFlipper.showNext(); 
     index++; 
    } 
} 
+0

Я использую getDisplayedChild ро получить индекс текущего отображаемого ребенка. Проблема заключается в замене представления. новое изображение не добавлено в viewflipper – Gabrielle

+0

см. мой отредактированный ответ. – jeet

0

Ihave сделано так же, как вас проблема без анимации только замена viewflipper. вы можете поместить анимацию в анимационные свойства. Поместите этот тип xml-макета.

<ViewFlipper android:id="@+id/vf1" android:layout_height="wrap_content" 
      android:layout_width="wrap_content" android:layout_margin="3dp"> 
      <RelativeLayout android:layout_width="wrap_content" 
       android:id="@+id/RLF1" android:background="@drawable/block_purpal" 
       android:layout_height="wrap_content"> 

      </RelativeLayout> 
      <RelativeLayout android:layout_width="wrap_content" 
       android:id="@+id/RLB1" android:gravity="center" android:background="@drawable/block_purpal" 
       android:layout_height="wrap_content"> 
       <TextView android:layout_width="wrap_content" android:id="@+id/textView1" 
        android:gravity="right" 
        android:layout_height="wrap_content" /> 
      </RelativeLayout> 
     </ViewFlipper> 

Set Время задержки:

private static final long DELAYTIME = 1000; 

Надень clicklistener зрения плавника

  Message msg = new Message(); 
      msg.what = 1; 
      delayHandler.sendMessageDelayed(msg, DELAYTIME); 

      vFilpper1.showNext(); 

наконец добавить следующее: общественности Handler delayHandler = новый Handler() {

@Override 
    public void handleMessage(Message message) { 
     super.handleMessage(message); 

     switch (message.what) { 
     case 1: 
      try { 
       vFilpper1.showPrevious(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      break; 

    so on other viewflipper.. 

Также Посетите его Documention , если дело это не лучшая идея, а затем перейти к:

how to check previous value in android of viewflipper

http://mobileorchard.com/android-app-development-view-filpper-and-sliding-drawer/

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

  • Нет связанных вопросов^_^