【问题标题】:full-screen image browser called from GridView从 GridView 调用的全屏图像浏览器
【发布时间】:2014-03-14 04:22:22
【问题描述】:

我有一个 GridView 活动,它由一个 GridView 组成,它显示来自 sdcard 位置的多达 100 个图像缩略图。我正在创建另一个活动,当触摸网格中的任何一个缩略图时都会调用该活动。这个其他活动应该全屏显示所选图像(可以通过将图像uri传递给新活动来做到这一点)。但是,我希望能够从所选图像的全屏视图向左/向右滑动以转到下一个,而不是返回到 gridview 活动并选择另一个图像进行全屏显示。

如何实现这个图像浏览器活动,从 sdcard 位置提取图像以使用滑动手势进行全屏浏览?

【问题讨论】:

    标签: android android-gridview


    【解决方案1】:

    您可以使用 ViewFlipper

    public class ImageViewTest extends Activity {
    
        private static final int SWIPE_MIN_DISTANCE = 120;
        private static final int SWIPE_MAX_OFF_PATH = 250;
        private static final int SWIPE_THRESHOLD_VELOCITY = 200;
        private GestureDetector gestureDetector;
        View.OnTouchListener gestureListener;
    
        private Animation slideLeftIn;
        private Animation slideLeftOut;
        private Animation slideRightIn;
        private Animation slideRightOut;
        private ViewFlipper viewFlipper;
    
        String message = "Initial Message"; 
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            //Set up viewflipper
            viewFlipper = new ViewFlipper(this);       
            ImageView i = new ImageView(this);
            i.setImageResource(R.drawable.sample_1);
            ImageView i2 = new ImageView(this);
            i2.setImageResource(R.drawable.sample_2);
            viewFlipper.addView(i);
            viewFlipper.addView(i2);
    
            //set up animations
            slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
            slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
            slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
            slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
    
            //put up a brownie as a starter
            setContentView(viewFlipper);
    
            gestureDetector = new GestureDetector(new MyGestureDetector());
        }
    
        public class MyGestureDetector extends SimpleOnGestureListener {
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                try {
                    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                        return false;
                    // right to left swipe
                    if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                        Log.v(LOGID,"right to left swipe detected");
                        viewFlipper.setInAnimation(slideLeftIn);
                        viewFlipper.setOutAnimation(slideLeftOut);
                        viewFlipper.showNext();
                        setContentView(viewFlipper);
    
                    } // left to right swipe 
                    else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                        Log.v(LOGID,"left to right swipe detected");                    
                        viewFlipper.setInAnimation(slideRightIn);
                        viewFlipper.setOutAnimation(slideRightOut);
                        viewFlipper.showPrevious();
                        setContentView(viewFlipper);
    
                    }
                } catch (Exception e) {
                    // nothing
                }
                return false;
            }
        }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    if (gestureDetector.onTouchEvent(event))
    return true;
    else
    return false;
    }
    
    }
    

    【讨论】:

      【解决方案2】:
      1. 通过 SDK 管理器获取最新版本的兼容性包(或转到 here
      2. 将 JAR 作为库安装到您的项目中
      3. 利用 ViewPager,它是一个 ViewGroup,其作用类似于 AdapterView,并为您完成所有滑动手势管理工作

      另外,来自 Android 开发者博客的 here is an example 可能会帮助您入门。

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        相关资源
        最近更新 更多