Android: Программно анимационный между изображениями в виджете Галереи

Примечание: С Мармелада-горошка удерживается от использования виджет галереи. ViewPager должен использоваться вместо этого.


Я хотел бы программно переместиться между изображениями в виджет Галереи с анимацией.

Я могу изменить в настоящее время отображающееся изображение с помощью setSelection(int position) метод, однако который не анимирует. Затем существует setSelection(int position, bool animate) но дополнительная булевская переменная на конце там, кажется, ничего не делает.

В источнике Галереи кажется, что это может обработать нажатия клавиш DPAD, таким образом, обходное решение, о котором я думал, должно было фальсифицировать нажатия клавиш. Например.

dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT))

Однако я не могу получить эту работу по некоторым причинам. Кто-либо попробовал это?

Я замечаю три из методов виджета, которые я хотел бы использовать moveNext(), movePrevious() и scrollToChild() являются все частными и неприменимыми.

Кто-либо знает, как я смог делать это?

9
задан bdls 20 December 2012 в 17:37
поделиться

3 ответа

Просто вызовите обработчик нажатия клавиш для галереи напрямую:

public boolean onKeyDown(int keyCode, KeyEvent event)

т.е.

Gallery gallery = ((Gallery) findViewById(R.id.gallery));

gallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, new KeyEvent(0, 0));

Одна важная вещь - это решение работает только в том случае, если дочерний элемент, который находится слева / справа, уже создан, что означает, что он должен быть 'видимым '. Если у вас изображение в полноэкранном режиме - подумайте о том, чтобы установить для интервала значение -1.

18
ответ дан 4 December 2019 в 08:32
поделиться

Используйте gallery.setSelected (int); Вот простой пример.


public class Splash extends Activity {

    ArrayList objects = new ArrayList();
    Gallery g;
    int i = 0;
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.photos);
        g = (Gallery) findViewById(R.id.gallery);
        objects.add(getResources().getDrawable(R.drawable.icon));
        objects.add(getResources().getDrawable(R.drawable.icon));
        objects.add(getResources().getDrawable(R.drawable.icon));
        objects.add(getResources().getDrawable(R.drawable.icon));
        objects.add(getResources().getDrawable(R.drawable.icon));
        objects.add(getResources().getDrawable(R.drawable.icon));
        g.setAdapter(new CustomAdapter(this, objects));
        g.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView arg0, View arg1,
                    int arg2, long arg3) {
                Log.i("", "selected " + arg2);
            }

            @Override
            public void onNothingSelected(AdapterView arg0) {}
        });
    }

    @Override
    public void onBackPressed() {
            g.setSelection(i++);
    }

        private class CustomAdapter extends BaseAdapter {

        private Context mCtx;
        private List objects;

        public int getCount() {
            return this.objects.size();
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public CustomAdapter(Context context, ArrayList objects) {
            super();
            mCtx = context;
            this.objects = objects;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView row = (ImageView) convertView;
            if (row == null) {
                row = new ImageView(mCtx);
                row.setBackgroundDrawable(objects.get(position));
            }
            return row;
        }
    }
}
2
ответ дан 4 December 2019 в 08:32
поделиться

В конце концов, я написал свою собственную версию виджета Галерея с помощью кода на этом сайте .

Затем я написал свой собственный метод, который использует mFlingRunnable.startUsingDistance (distance);

Теперь я могу программно анимировать галерею между изображениями.

1
ответ дан 4 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: