当我们用Gallery来显示一张图片的时候,往往需要点击查看其放太效果,网上有很多方法大部分是利用动画实现,现在介绍一种其它的方法来实现,给Gallery设置ItemClick事件,跳到相应的ViewFlipper来实现Gallery的图片左右滑动。

public class ShowImagesActivity extends Activity implements
        android.view.GestureDetector.OnGestureListener {
    private static final int SLIDE_RANGE = 100;
    private static final int AUTO_SLIDE_TIME = 5;
    private GestureDetector gestureDetector = null;
    private ViewFlipper viewFlipper = null;
    private Activity mActivity = null;
    private AsyncPhoneLoader mImageLoader;
    private int mFiSize = 0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_filpper_layout);
        Intent intent = getIntent();
        @SuppressWarnings("unchecked")
        ArrayList imgesList = (ArrayList) intent.getExtras().get("imgList");
        mFiSize = imgesList.size();
        int curPos = intent.getIntExtra("position", 0);
        mImageLoader = new AsyncPhoneLoader();
        mActivity = this;
        viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
        gestureDetector = new GestureDetector(this);
        loadImages(imgesList, curPos);
        viewFlipper.setDisplayedChild(curPos); //当前显示的图片位置
        viewFlipper.setAutoStart(true);
        viewFlipper.setFlipInterval(AUTO_SLIDE_TIME * 1000);
        if (viewFlipper.isAutoStart() && !viewFlipper.isFlipping()) {
            viewFlipper.startFlipping();
        }
    }

    /**
     * async loading the images
     * 
     * @param urlList
     * @param pos
     */
    private void loadImages(ArrayList urlList, int pos) {
        for (int i = 0; i < urlList.size(); i++) {
            final ImageView imageView = new ImageView(this);
            Drawable drawable = null;
            drawable = mImageLoader.loadDrawable(urlList.get(i), mActivity, false,
                    new ImageCallback() {
                        @Override
                        public void imageLoaded(Drawable imageDrawable, String imageUrl) {
                            if (imageDrawable != null) {
                                imageView.setImageDrawable(imageDrawable);
                            } else {
                                imageView.setImageResource(R.drawable.photo_empty);
                            }
                        }
                    });
            if (drawable == null) {
                imageView.setImageResource(R.drawable.photo_load);
            } else {
                imageView.setImageDrawable(drawable);
            }
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            viewFlipper.addView(imageView, new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.FILL_PARENT));
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        viewFlipper.stopFlipping();
        viewFlipper.setAutoStart(false);
        return gestureDetector.onTouchEvent(event);
    }


    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if (e2.getX() - e1.getX() > SLIDE_RANGE) {
            if (viewFlipper.getDisplayedChild() == 0) { //滑动到第一张不能再向左滑动
                viewFlipper.stopFlipping();
                return false;
            } else {
                Animation rightInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.in_leftright);
                Animation rightOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.out_leftright);
                viewFlipper.setInAnimation(rightInAnim);
                viewFlipper.setOutAnimation(rightOutAnim);
                viewFlipper.showPrevious();
                return true;
            }
        } else if (e2.getX() - e1.getX() < -SLIDE_RANGE) {
            if (viewFlipper.getDisplayedChild() == mFiSize - 1) {  //滑动到最后一张不能再向右滑动
                viewFlipper.stopFlipping();
                return false;
            } else {
                Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.in_rightleft);
                Animation lOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.out_rightleft);              
                viewFlipper.setInAnimation(lInAnim);
                viewFlipper.setOutAnimation(lOutAnim);
                viewFlipper.showNext();
                return true;
            }
        }
        return true;
    }

    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }
    @Override
    public void onLongPress(MotionEvent e) {
    }
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        return false;
    }
    @Override
    public void onShowPress(MotionEvent e) {
    }
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return false;
    }

进出的动画可以自己随便设置

类似:

<?xml version="1.0" encoding="utf-8"?>

            android:duration="500"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />

这样就能实现了

更多相关文章

  1. Android中Button
  2. Android学习笔记一:Android开发环境搭建和第一个应用程序
  3. 定制dialog的方式
  4. Android中Toolbar的使用 AppCompatActivity必备
  5. 用fiddler做代理服务器转发请求
  6. Android(安卓)Custom View --- Continuous Slider(连续滑动器)
  7. android 开发-系统设置界面的实现
  8. React-Native-StatusBar
  9. android手势操作&&实现滑动切换activity

随机推荐

  1. android踩坑日记
  2. Android JNI开发工具篇(1)-开发环境搭建
  3. android_tips
  4. Android:用DialogFragment实现LoadingDial
  5. Android AsyncTask 源码分析详解
  6. android基础学习--->Android(安卓)Shared
  7. Android SQLiteOpenHelper Sqlite数据库
  8. Mac下关于The "android" command is depr
  9. android RSA和Java RSA加密不一致的坑
  10. android配置X86虚拟机