Android: Programmatically animate between images in Gallery widget

前端 未结 5 1391
鱼传尺愫
鱼传尺愫 2020-12-14 12:11

Note: As of Jellybean the gallery widget is deprecated. A ViewPager should be used instead.


I\'d like to programmatically move between images in the Gallery wi

相关标签:
5条回答
  • 2020-12-14 12:52

    You can Animate using dispatchKeyEvent or calling onFling directly.

    Here is sample code for dispatchKeyEvent:

    KeyEvent evtKey = new KeyEvent(0, KeyEvent.KEYCODE_DPAD_RIGHT);
    dispatchKeyEvent(evtKey);
    
    0 讨论(0)
  • 2020-12-14 12:52

    Use gallery.setSelected(int); Here is a simple example.

    
    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;
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-14 12:59

    Just call the key press handler for the gallery directly:

    public boolean onKeyDown(int keyCode, KeyEvent event)
    

    i.e

    Gallery gallery = ((Gallery) findViewById(R.id.gallery));
    
    gallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, new KeyEvent(0, 0));
    

    One important thing - this solution works only if child that is on left/right was already created, which means that it has to be 'visible'. If you have your image on fullscreen - consider setting spacing to -1 value.

    0 讨论(0)
  • 2020-12-14 13:00

    Try this

    mGallery.onFling(null,null, velocity,0);

    http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf#

    0 讨论(0)
  • 2020-12-14 13:05

    In the end I wrote my own version of the Gallery widget with the help of the code at this site.

    I then wrote my own method which uses mFlingRunnable.startUsingDistance(distance);

    Now I can programmatically animate the gallery between images.

    0 讨论(0)
提交回复
热议问题