Как заменить вид другим в ViewFlipper - PullRequest
0 голосов
/ 20 января 2012

Мое приложение содержит 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 метод.Пожалуйста, помогите .. Любая идея приветствуется.

Ответы [ 2 ]

0 голосов
/ 20 января 2012

Я сделал, как и вы, проблему без анимации, только заменив 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>

Задать время задержки:

    private static final long DELAYTIME = 1000;

Поставить на clicklistener вида флиппер

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

            vFilpper1.showNext();

наконец добавьте это: public Handler delayHandler = новый обработчик () {

    @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..

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

как проверить предыдущее значение в андроиде viewflipper

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

0 голосов
/ 20 января 2012

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

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

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