使用 MotionEvent.ACTION_MOVE 制作像主屏幕一样的 ViewFlipper

2024-02-10

好的,我有一个ViewFlipper与三个LinearLayouts嵌套在其中。它默认显示第一个。这段代码:

// Assumptions in my Activity class:
// oldTouchValue is a float
// vf is my view flipper
@Override
public boolean onTouchEvent(MotionEvent touchEvent) {
  switch (touchEvent.getAction()) {
    case MotionEvent.ACTION_DOWN: {
      oldTouchValue = touchEvent.getX();
      break;
    }
    case MotionEvent.ACTION_UP: {
      float currentX = touchEvent.getX();
      if (oldTouchValue < currentX) {
        vf.setInAnimation(AnimationHelper.inFromLeftAnimation());
        vf.setOutAnimation(AnimationHelper.outToRightAnimation());
        vf.showNext();
      }
      if (oldTouchValue > currentX) {
        vf.setInAnimation(AnimationHelper.inFromRightAnimation());
        vf.setOutAnimation(AnimationHelper.outToLeftAnimation());
        vf.showPrevious();
      }
      break;
    }
    case MotionEvent.ACTION_MOVE: {
      // TODO: Some code to make the ViewFlipper
      // act like the home screen.
      break;
    }
  }
  return false;
}

public static class AnimationHelper {
  public static Animation inFromRightAnimation() {
    Animation inFromRight = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, +1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    inFromRight.setDuration(350);
    inFromRight.setInterpolator(new AccelerateInterpolator());
    return inFromRight;
  }

  public static Animation outToLeftAnimation() {
    Animation outtoLeft = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, -1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    outtoLeft.setDuration(350);
    outtoLeft.setInterpolator(new AccelerateInterpolator());
    return outtoLeft;
  }

  // for the next movement
  public static Animation inFromLeftAnimation() {
    Animation inFromLeft = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, -1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    inFromLeft.setDuration(350);
    inFromLeft.setInterpolator(new AccelerateInterpolator());
    return inFromLeft;
  }

  public static Animation outToRightAnimation() {
    Animation outtoRight = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, +1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    outtoRight.setDuration(350);
    outtoRight.setInterpolator(new AccelerateInterpolator());
    return outtoRight;
  }
}

...处理视图翻转,但动画非常“开/关”。我想知道是否有人可以帮助我完成最后一部分。假设我可以访问 LinearLayouts,有没有办法可以根据 deltaX 和 deltaY 设置布局的位置?

有人给了我这个链接 https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/animation/TranslateAnimation.java并说我应该参考applyTransformation方法以获取有关如何执行此操作的提示,但我不知道如何重复相同的行为。


移动手指时移动视图很容易完成:

case MotionEvent.ACTION_MOVE:
    final View currentView = vf.getCurrentView();
    currentView.layout((int)(touchEvent.getX() - oldTouchValue), 
            currentView.getTop(), currentView.getRight(), 
            currentView.getBottom());
break;

现在,这只移动当前视图,而不移动邻居。我还没有测试过,但这些可能可以通过 getChildAt 获得:

vf.getChildAt(vf.getDisplayedChild() - 1); // previous
vf.getChildAt(vf.getDisplayedChild() + 1); // next

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MotionEvent.ACTION_MOVE 制作像主屏幕一样的 ViewFlipper 的相关文章

  • 以 Gif 形式在 Android 上以编程方式共享 WhatsApp 视频

    我如何将 mp4 视频文件转换为 WhatsApp gif 文件 在应用程序 UI 中简单显示为 gif 但内部是特定的 mp4 格式 以在 android 共享意图中使用 并被 Whatsapp 聊天应用程序识别为此类媒体 我搜索了很多
  • 是否可以禁止 EditText 中的第一个数字为“0”

    您好 我只是想知道是否可以禁止用户输入的第一个数字为 0
  • Android 两个日期之间的差异

    我有两个约会 例如 String date 1 yyyyMMddHHmmss String date 2 yyyyMMddHHmmss 我想打印差异 例如 2d 3h 45m 我怎样才能做到这一点 谢谢 DateTimeUtils obj
  • 如何通过单击颤动推送通知来打开特定屏幕

    我试图在单击推送通知时打开特定屏幕 我的有效负载如下所示 var payload notification title notificationTitle body notificationMessage click action scre
  • Android-无法解析符号 BaseObservable

    我正在尝试在 android 中实现数据绑定示例并使用可绑定变量创建 POJO 但我收到此错误 请帮忙 我正在关注这个教程http www vogella com tutorials AndroidDatabinding article h
  • 如何在android中以编程方式读取我的应用程序中电子邮件附加的文件?

    我知道一种获取此处显示的电子邮件中附件名称的方法 Android 在我的应用程序中获取电子邮件附件名称 https stackoverflow com questions 6035535 android get email attachme
  • android-透明RelativeLayout

    我想要制作一个具有可绘制渐变作为背景的活动 并将在其背景顶部显示 4 个面板 相对布局 现在我想让 4 个面板透明 例如 50 以便也可以看到渐变背景 我搜索了谷歌 但我发现只能通过活动而不是布局来做到这一点 如何做我想做的事 您可以创建一
  • 更改图库中的边框样式

    我正在服用this http www androidpeople com android gallery imageview example 教程 正如你所看到的this http www androidpeople com wp cont
  • Eclipse 说“更新 Android Developer Toolkit”

    我不知何故弄乱了我的 Eclipse 和 Android 设置 我不知道如何修复它 问题症状如下 在 首选项 gt Android 中 我尝试选择 android sdk linux 的位置 选择时出现错误 此 Android SDK 需要
  • Android NDK 模块依赖于另一个模块

    我有一个使用 Android NDK 编写的 Android 项目 在该项目中 我使用两个预构建的共享库 GpkgSDK 和 Spatialite 并构建另外两个共享库 WFSHelpers 和 com example gpkgviewer
  • Facebook 和 google 登录不适用于 beta 测试 APK

    Google 和 Facebook 登录在 Android Studio Tools 中工作正常 但它们不适用于测试版本或 Beta 测试 因此请给我任何解决此问题的线索 联系谷歌支持后我已经解决了这个问题 以下是此问题的修复方法 请按照步
  • 如何检测屏幕何时关闭?

    是否可以检测屏幕何时关闭并捕获它 我想在 Android 的全局设置中将计时器设置为 15 秒 我正在尝试查找一些如何捕获唤醒锁定模式的信息 只需注册您的应用程序即可执行操作Intent ACTION SCREEN OFF https de
  • Apache POI 的 ProGuard 设置

    我正在构建一个使用 Apache POI 库的应用程序 当我调试应用程序 在不运行 Proguard 的情况下编译它 时 一切都运行良好 但是在导出 APK 后 当我运行应用程序并打开 Excel 文件时 出现以下异常 RuntimeExc
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • Handler、MessageQueue、Looper,它们都是运行在UI线程上的吗?

    我正在尝试解决线程问题 并且我知道我可能会使用Handler将消息 可运行对象发布到MessageQueue 这又被Looper并发送回Handler进行加工 如果我发帖到Handler在我的活动中 是Activity Handler Me
  • 如何在 Jetpack Compose 中集成自动填充

    我想在我的应用程序中提供一些自动填充功能 电子邮件和密码 该功能完全使用 Jetpack compose 编写 我碰到这篇博文 https bryanherbst com 2021 04 13 compose autofill and 这个
  • 如何在Android中将字体粗细设置为细、常规

    我有 3 个文本视图 我需要将它们的粗细设置为 轻 常规 和 压缩 有人可以帮助我如何在 Android 中实现这一目标吗 Use android textStyle on a TextView设置文本样式 例如bold italic或正常
  • Firebase:获取对第一个项目/元素的引用

    我正在尝试获取对 firebase Array 中第一个项目的引用 就我而言 它会是 ElmmycgjS1Nvq albums IrdMMds 但我不确定如何构造查询 dbRef child ElmmycgjS albums child n
  • recyclerview 未连接适配器;跳过布局

    刚刚实施RecyclerView在我的代码中 替换ListView 一切正常 显示数据 但正在记录错误消息 15 25 53 476 E RecyclerView No adapter attached skipping layout 15
  • Android Mediaplayer:下载媒体文件的 setDataSource 问题

    我有一个可以录制和播放音频文件的应用程序 一些音频文件是使用 httpclient 使用简单的标准 http 下载来下载的 很长一段时间以来 它就像一种魅力 现在我突然无法播放我下载的文件 该堆栈失败 我将文件存储在 SDCard 上 并且

随机推荐

  • EmberJS 路线事件转换

    emberjs 1 0 0 rc 6 1 我的控制器 Application LoginController Ember Controller extend loginFailed false isProcessing false isSl
  • SIFT匹配和识别?

    我正在开发一个应用程序 其中使用 SIFT RANSAC 和单应性来查找对象 OpenCV C Java 我面临的问题是 在有很多异常值的地方 RANSAC 表现不佳 为此我想尝试一下SIFT的作者说的很好的办法 投票 我读过我们应该在 4
  • Inno Setup 自定义页面

    我想在选择安装位置的页面之后创建一个自定义向导页面 我已经了解了如何创建自定义页面并将其添加到向导中InitializeWizard程序 我的问题是 当我创建自定义页面时 安装位置选择的默认页面不再出现 我必须使用哪些选项来保留默认页面 安
  • 如何删除MySQL中的所有孤立记录?

    我有 3 个表 MySQL MyIsam user id message id userId archivedMessage id userId 如何删除所有没有消息且没有存档消息的用户 你可以使用not exists delete fro
  • MS访问函数vba,宏[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 MS Access 中制作报告时遇到一个小问题 我用 vba 编写了一个函数 并为 RunCode 函数 创建了一
  • JavaScript 从字符串中删除零宽度空格(unicode 8203)

    我正在编写一些处理网站内容的 JavaScript 当用户按退格键时 SharePoint 文本编辑器倾向于在文本中放置 零宽度空格 字符 这阻碍了我的努力 该字符的 unicode 值为 8203 即十六进制的 B200 我尝试使用默认的
  • 当 git pull 引起冲突但 git pull --rebase 没有冲突时,这意味着什么?

    我正在从只有我有权访问的存储库中提取数据 据我所知 我只从一个存储库推送到它 有几次 我尝试推动它并得到了这个 To email protected cdn cgi l email protection tsched dev git rej
  • 是否有更易读或 Pythonic 的方式将 Decimal 格式化为 2 位?

    将小数固定到两位的语法到底是怎么回事 gt gt gt from decimal import Decimal gt gt gt num Decimal 1 0 gt gt gt num quantize Decimal 10 2 seri
  • 无需在 go 中阅读即可查看 Conn

    我有一个服务器net Conn 我想在读出字节之前先查看一下它 以检查它是否是客户端尝试使用的纯文本协议或 SSL TLS 检查http golang org pkg net http golang org pkg net 看来Conn接口
  • 如何使用 mvc4 C# 在 linq toEntity 预加载中包含多个表

    我有 6 节课 我尝试使用linq到实体以获得SiglaUF最后一个更深层次的表的信息 在视图 MVC 中 问题是我收到以下错误 ObjectContext 实例已被处置 不能再用于需要连接的操作 视图是这样的 gt model IEnum
  • 数组中元素的确切最大限制是多少

    这是一个纯粹的理论问题 所以请不要在你的答案中警告我这一点 如果我没记错的话 因为 NET 中的每个数组都由Int32 意味着索引范围为0 to Int32 MaxValue 假设不涉及内存 GC 约束 NET 中的数组最多可以有21474
  • 如何将原始 html 文件添加到 create-react-app 中的公共文件夹

    我有一个使用 create react app 创建的 React 应用程序 我已经公开了一个静态 html 页面 我想在使用 iframe 的同一应用程序中使用该 html 构建后 带有 covid html 的 iframe 不会加载
  • jquery 延迟链接被跟踪

    我有一个基于 css 的简短动画 我想在链接之前播放它 一张在页面加载时突然进入的卡片在单击后突然弹出 然而 目前 调用的页面加载速度太快 我希望能够短暂延迟 href 的跟踪 这是我所得到的 document ready function
  • 计算两个地理点之间的最短路径?

    我是 Java 和 Android 新手 我需要找到两个路径点之间的最短路径 我一整天都在寻找答案 我刚刚得到了这个代码 var directionDisplay var directionsService new google maps
  • 应用程序更新后小部件消失了

    更新我的应用程序后 有时所有旧的小部件都会从主屏幕上消失 在应用程序启动器 小部件选择器中 我的三个小部件出现两次 直到重新启动 有什么建议么 在本页 https medium com the wtf files the mysteriou
  • 在 pandas 数据帧上使用 scipy NonlinearConstraint 求解非线性方程

    我正在尝试求解方程组 其中 a b 和 c 是 pandas 数据框中的列 我曾经使用 Excel 在其中运行宏 通过更改其他列 函数 的值来在一列 残差 中进行查找 但我不知道如何在Python中做到这一点 我已经问过here https
  • 指定 Flexbox Flex 项目的宽度:宽度还是基础? [复制]

    这个问题在这里已经有答案了 假设我正在做 3 个弹性列 第一个 50 另外两个自动调整 half flex 0 0 auto width 50 or half flex 0 0 50 这些似乎在功能上是相同的 他们是吗 底部语句相当于 ha
  • 如何将 Python 捆绑到 macOS .app 应用程序中?

    我有一个用 python 编写的软件 带有用 PyQt 编写的图形用户界面 为了创建该软件的可执行文件 我附带了一个 Python 和 Qt 预编译版本 这个技巧似乎在 Windows 和 Linux 中都有效 因为我知道如何创建安装程序
  • 在 Storyboard 中切换 UINavigationController 堆栈的最佳实践

    在我们的故事板中 我们有多个UINavigationController堆栈 例如 LoginViewController堆栈完全独立于SWRevealViewController stack 在它们之间切换的最佳实践是什么 当我按下注销按
  • 使用 MotionEvent.ACTION_MOVE 制作像主屏幕一样的 ViewFlipper

    好的 我有一个ViewFlipper与三个LinearLayouts嵌套在其中 它默认显示第一个 这段代码 Assumptions in my Activity class oldTouchValue is a float vf is my