注意:从Jellybean开始,不推荐使用gallery小部件。应该使用ViewPager代替。
我想以编程方式在Gallery小部件中使用动画在图像之间移动。
我可以使用setSelection(int position)
方法更改当前显示的图像,但这不会设置动画。然后是setSelection(int position, bool animate)
但是那里的额外布尔值似乎没有做任何事情。
在source of Gallery中它似乎可以处理DPAD按键,所以我想到的解决办法就是伪造按键。例如
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT))
然而,出于某种原因,我无法使其工作。有人试过吗?
我注意到我喜欢使用的小部件方法中的三个moveNext()
,movePrevious()
和scrollToChild()
都是私有且无法使用的。
有谁知道我怎么能这样做?
答案 0 :(得分:18)
直接调用图库的按键处理程序:
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值。
答案 1 :(得分:3)
您可以使用dispatchKeyEvent动画或直接调用onFling。
以下是dispatchKeyEvent的示例代码:
KeyEvent evtKey = new KeyEvent(0, KeyEvent.KEYCODE_DPAD_RIGHT);
dispatchKeyEvent(evtKey);
答案 2 :(得分:2)
使用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;
}
}
}
答案 3 :(得分:1)
最后,我在this site的代码的帮助下编写了我自己的Gallery小部件版本。
然后我编写了自己的方法,使用mFlingRunnable.startUsingDistance(distance);
现在,我可以通过编程方式为图库之间的图库设置动画。
答案 4 :(得分:1)
试试这个
mGallery.onFling(null,null,velocity,0);
http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf#