Название текущего представления из ViewFlipper - PullRequest
0 голосов
/ 18 января 2012

У меня есть ViewFlipper со многими изображениями. Я добавляю изображения в ViewFlipper вот так:

bitmap = BitmapFactory.decodeFile(files[i].getPath());
img = new ImageView(this);
img.setImageBitmap(bitmap);
img.setScaleType(ImageView.ScaleType.FIT_XY);
vf.addView(img, new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT));
img = null;

в цикл. Когда анимация запускается, я хочу знать, какое изображение (имя изображения) будет отображаться, потому что для некоторых изображений я должен прекратить переключать ViewFlipper..

animFlipInNext.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                System.out.println("AnimStart- LeftIn" + " Will be displayed "
                        + vf.getDisplayedChild());
                final File[] imageName = images.listFiles(); //images that I want for viewflipper to stop.
                for (int i = 0; i < images.length(); i++) {
                    bitmap = BitmapFactory.decodeFile(imageName[i].getPath());
                    Drawable background = new BitmapDrawable(bitmap);
                    if (vf.getCurrentView().getBackground().equals(background)) {
                        System.out.println("begin  "
                                + files[i].getName());
                    } else
                        System.out.println("NUNUNU");

                }
            }

но ничего не происходит. Я не получаю никаких сообщений. Где моя ошибка? Или как это сделать?

1 Ответ

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

Несколько вопросов, которые я выбрал:

Флиппер вида будет автоматически переключаться между вашими видами с установленным интервалом. Я не уверен, будет ли ваш слушатель срабатывать при каждом «щелчке» или он будет срабатывать только при первом вызове startFlipping(). Вы можете проверить, вызывается ли он при каждом броске, или только когда переворот начинается, введя Log.v() в качестве первой строки и проверив ваш вывод.

У вас также есть логическая ошибка, которая вызывает вас:

vf.getCurrentView().getBackground().equals(background)

В этой строке кода вы не проверяете, имеет ли фоновый объект один и тот же источник, вы спрашиваете, является ли он точно таким же объектом. Как вы знаете, это не потому, что вы только что создали новый background объект в строке ранее.

Тем не менее, вы должны быть в состоянии достичь того, что вы хотите, как это. Все Views имеют атрибут «Один размер подходит всем», который вы можете использовать по любой причине. Рассмотрим этот код:

bitmap = BitmapFactory.decodeFile(files[i].getPath());
img = new ImageView(this);
img.setImageBitmap(bitmap);
*img.setTag(files[i].getPath())*
img.setScaleType(ImageView.ScaleType.FIT_XY);
vf.addView(img, new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.FILL_PARENT));
img = null;

Теперь вы можете позвонить:

if (vf.getCurrentView().getTag().toString().equalsIgnoreCase(mPathImLookingFor)) { 
    // Do something
}
...