gallery的onScroll监听

//转自:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=178703

public class MyGallery extends Gallery {
        private GestureDetector gestureScanner;
        private MyImageView imageView;

        private static final int NONE = 0;
        private static final int DRAG = 1;
        private static final int ZOOM = 2;
        
        private int mode = NONE;
        private float oldDist;
        private Matrix matrix = new Matrix();
        private Matrix savedMatrix = new Matrix();
        private PointF start = new PointF();
        private PointF mid = new PointF();
        private float minScaleR;// 最小缩放比例
        private Bitmap bitmap;
        static final float MAX_SCALE = 4f;// 最大缩放比例
        
        public MyGallery(Context context) {
                super(context);
//                minZoom();
        }

        public MyGallery(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
        }

        public MyGallery(Context context, AttributeSet attrs) {
                super(context, attrs);

        }
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                View view = MyGallery.this.getSelectedView();
                if (view instanceof MyImageView) {
                        imageView = (MyImageView) view;

                        float v[] = new float[9];
                        Matrix m = imageView.getImageMatrix();
                        m.getValues(v);
                        // 图片实时的上下左右坐标
                        float left, right;
                        // 图片的实时宽,高
                        float width, height;
                        width = imageView.getScale() * imageView.getImageWidth();
                        height = imageView.getScale() * imageView.getImageHeight();
                        // 一下逻辑为移动图片和滑动gallery换屏的逻辑。如果没对整个框架了解的非常清晰,改动以下的代码前请三思!!!!!!
                        if ((int) width <= PicDisp.screenWidth && (int) height <= PicDisp.screenHeight)// 如果图片当前大小<屏幕大小,直接处理滑屏事件
                        {
                                
                                super.onScroll(e1, e2, distanceX, distanceY);        //动的状态
                             

                        } else {
                                left = v[Matrix.MTRANS_X];
                                right = left + width;
                                Rect r = new Rect();
                                imageView.getGlobalVisibleRect(r);

                                if (distanceX > 0)// 向左滑动
                                {
                                        if (r.left > 0) {// 判断当前ImageView是否显示完全
                                                super.onScroll(e1, e2, distanceX, distanceY);
                                        } else if (right < PicDisp.screenWidth) {
                                                super.onScroll(e1, e2, distanceX, distanceY);
                                        } else {
                                                imageView.postTranslate(-distanceX, -distanceY);
                                        }
                                } else if (distanceX < 0)// 向右滑动
                                {
                                        if (r.right < PicDisp.screenWidth) {
                                                super.onScroll(e1, e2, distanceX, distanceY);
                                        } else if (left > 0) {
                                                super.onScroll(e1, e2, distanceX, distanceY);
                                        } else {
                                                imageView.postTranslate(-distanceX, -distanceY);
                                        }
                                }
                        }

                } else {
                        super.onScroll(e1, e2, distanceX, distanceY);
                }
                return false;
        }
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                return false;
        }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值