Android 实现局部图片滑动指引效果

发布时间 - 2026-01-10 22:45:04    点击率:

Android 实现局部图片滑动指引效果

而ViewPager的事件监听器代码如下:

  // 滑动页面更改事件监听器
  private class ImagePageChangeListener implements OnPageChangeListener {
    @Override 
    public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 
 
    } 
 
    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 
 
    } 
 
    @Override 
    public void onPageSelected(int index) { 
      pageIndex = index;
      slideLayout.setPageIndex(index);
      tvSlideTitle.setText(parser.getSlideTitles()[index]);
      
      for (int i = 0; i < imageCircleViews.length; i++) { 
        imageCircleViews[index].setBackgroundResource(R.drawable.dot_selected);
        
        if (index != i) { 
          imageCircleViews[i].setBackgroundResource(R.drawable.dot_none); 
        } 
      }
    } 
  }
 

  事件监听器中主要在回调函数onPageSelected(int index)中变换标题和圆点图片。 

  由于滑动区域下方的内容是不变的,也就是不滑动的,正如在我在上面提到的,内容可能会超出屏幕的范围,所以我们需要使用ScrollView以便内容过多的时候显示滚动条。可能一部分朋友会想到,要显示滚动条我也知道使用ScrollView。我想在这里说的是,这里即有ViewPager控件,也有ScrollView,如果两个View单独使用不会有什么问题。然而不幸的是,两个一结合使用就出现了问题。什么问题呢?就是在滑动图片时出现反弹的现象,就是在滑动时很难滑动,我滑动时感觉很吃力,而且图片就是滑动不过去,这个就是两个View之间的冲突,因为两个View都是滑动的View,都会计算相应的位置和判断相应的距离。 

  我们如何来解决这个冲突呢?这里我们需要重写ScrollView的onInterceptTouchEvent()回调函数。需要在程序里新加一个ScrollViewExtend类并继承自ScrollView,下面是其代码:

package com.image.indicator.control;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;

/**
 * 能够兼容ViewPager的ScrollView
 * @Description: 解决了ViewPager在ScrollView中的滑动反弹问题

 * @File: ViewPagerCompatScrollView.java

 * @Package com.image.indicator.control

 * @Author Hanyonglu

 * @Date 2012-6-18 下午01:34:50

 * @Version V1.0
 */
public class ScrollViewExtend extends ScrollView {
  // 滑动距离及坐标
  private float xDistance, yDistance, xLast, yLast;

  public ScrollViewExtend(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        xDistance = yDistance = 0f;
        xLast = ev.getX();
        yLast = ev.getY();
        break;
      case MotionEvent.ACTION_MOVE:
        final float curX = ev.getX();
        final float curY = ev.getY();
        
        xDistance += Math.abs(curX - xLast);
        yDistance += Math.abs(curY - yLast);
        xLast = curX;
        yLast = curY;
        
        if(xDistance > yDistance){
          return false;
        } 
    }

    return super.onInterceptTouchEvent(ev);
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对 本站的支持!


# Android  # 实现局部图片滑动指引效果  # 图片滑动指引效果  # Android自定义ImageView实现在图片上添加图层效果  # Android中从图库中选取图片实例详解  # Android ViewPager实现图片轮翻效果  # Android编程实现支持拖动改变位置的图片中叠加文字功能示例  # Android中超大图片无法显示的问题解决  # Android自定义组件获取本地图片和相机拍照图片  # android自定义ImageView仿图片上传示例  # Android ViewPager加载图片效果  # Android百度地图应用之图层展示  # Android编程实现图片背景渐变切换与图层叠加效果  # 的是  # 回调  # 滚动条  # 都是  # 有什么  # 我也  # 我想  # 也有  # 在我  # 就是在  # 很难  # 在这  # 希望能  # 重写  # 在上面  # 谢谢大家  # 什么问题  # 里说  # 出现了  # 圆点 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 制作旅游网站html,怎样注册旅游网站?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  android nfc常用标签读取总结  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  英语简历制作免费网站推荐,如何将简历翻译成英文?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何在阿里云虚拟服务器快速搭建网站?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  *服务器网站为何频现安全漏洞?  JS实现鼠标移上去显示图片或微信二维码  如何彻底删除建站之星生成的Banner?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  郑州企业网站制作公司,郑州招聘网站有哪些?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  html如何与html链接_实现多个HTML页面互相链接【互相】  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何确保西部建站助手FTP传输的安全性?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何有效防御Web建站篡改攻击?  iOS发送验证码倒计时应用  jquery插件bootstrapValidator表单验证详解  如何用美橙互联一键搭建多站合一网站?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Android okhttputils现在进度显示实例代码  昵图网官网入口 昵图网素材平台官方入口  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  高端企业智能建站程序:SEO优化与响应式模板定制开发  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Python面向对象测试方法_mock解析【教程】  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何在腾讯云免费申请建站?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel如何自定义分页视图?(Pagination示例)  JavaScript模板引擎Template.js使用详解