gallery的onScroll监听

本文介绍了一个自定义的Gallery类——MyGallery,该类针对图片滑动进行了特殊处理,以适应不同尺寸图片的滑动需求。通过检测图片大小与屏幕尺寸的关系,实现了平滑的图片切换效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//转自: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;
        }

}


资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示与隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外,与 v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值