Примечание: С Мармелада-горошка удерживается от использования виджет галереи. ViewPager должен использоваться вместо этого.
Я хотел бы программно переместиться между изображениями в виджет Галереи с анимацией.
Я могу изменить в настоящее время отображающееся изображение с помощью setSelection(int position)
метод, однако который не анимирует. Затем существует setSelection(int position, bool animate)
но дополнительная булевская переменная на конце там, кажется, ничего не делает.
В источнике Галереи кажется, что это может обработать нажатия клавиш DPAD, таким образом, обходное решение, о котором я думал, должно было фальсифицировать нажатия клавиш. Например.
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT))
Однако я не могу получить эту работу по некоторым причинам. Кто-либо попробовал это?
Я замечаю три из методов виджета, которые я хотел бы использовать moveNext()
, movePrevious()
и scrollToChild()
являются все частными и неприменимыми.
Кто-либо знает, как я смог делать это?
Просто вызовите обработчик нажатия клавиш для галереи напрямую:
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.
Используйте 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;
}
}
}
В конце концов, я написал свою собственную версию виджета Галерея с помощью кода на этом сайте .
Затем я написал свой собственный метод, который использует mFlingRunnable.startUsingDistance (distance);
Теперь я могу программно анимировать галерею между изображениями.