实现类似iOS拍照的按钮滑动功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现类似iOS拍照的按钮滑动功能相关的知识,希望对你有一定的参考价值。

参考技术A 先上效果图:

有不足的地方请多多指教!

由于工作,我也是边工作边学习自定义,多亏了 辉哥的指教 ,在此谢谢!

下面进入正题:

我们要实现的是,实现类似iOS拍照的按钮滑动功能,这里就以最近项目中用到的开始、暂停、停止为准,度娘了一下,发现没有,于是决定自己搞吧!

需求分析:
1:进入项目就只有暂停按钮居中,(所有按钮纵坐标不变)

2:点击暂停按钮,暂停按钮消失,开始和停止按钮向两边滑动至屏幕的(1/6-按钮宽度的一半)和(5/6-按钮宽度的一半)

3:点击开始按钮,开始按钮和停止按钮向中间滑动,当重合时显示,暂停按钮显示

一:继承RelativeLayout,复写其中三个方法,在第三个方法中获取屏幕宽度,并分成三等分,分别获取到这三等分的各自中点

1.获取屏幕宽度方法:

2.复写其中三个方法,并分成三等分,分别获取到这三等分的各自中点

二、待布局加载完成获取子view,先获取子view的数量就是三个:开始、暂停、停止

三、接下来就是在初始摆放控件的方法里面进行进行监听、位置摆放等操作

1.设置暂停按钮的初始位置(中点不行),并设置开始按钮和停止按钮的监听,默认三个按钮需要到达的位置为:

开始:屏幕宽度的六分之一减去按钮宽度的一半

暂停:屏幕宽度的一半减去按钮宽度的一半

停止:屏幕宽度的六分之五减去按钮宽度的一半

2。因为默认是在进行中所以进入项目就只有暂停按钮,点击暂停按钮就涉及三个按钮的动画:暂停按钮消失、开始按钮向左滑动、停止按钮向右滑动

点击暂停:创建动画集合,分别创建开始和停止的属性动画,最后将开始和停止一起加入动画集合,然后start

3.点击开始按钮就涉及三个按钮的动画:开始按钮向右滑动、停止按钮向左滑动,当开始按钮坐标到达暂停按钮时,暂停按钮显示、开始和停止按钮消失

点击开始:创建动画集合,分别创建开始和停止的属性动画,最后将开始和停止一起加入动画集合,然后start

四、接下来在xml文件中加入刚写好的布局,在布局中随便加入三个按钮:开始,暂停,停止

然后运行,OK!

github: demo地址

自己开发的 vue 滑动按钮组件 vue-better-slider

写在前面的

        这个人第一次尝试开发并发布一个 vue 的组件,该组件实现了类似 ios 手机淘宝客户端 -> 消息界面中消息的滑动删除功能等,如下为该组件的文档。

一个 Vue 的滑动按钮组件,有关滑动方面的处理借鉴 better-scroll 的实现。

在线例子

起步

安装

npm i --save vue-sliding-button

引入

import Vue from ‘vueimport SlidingButton from ‘vue-sliding-buttonVue.use(SlidingButton)

使用

<template>
    <div>
      <better-slider>
        <div slot="front" class="front">
          前面的内容
        </div>
        <div slot="back" class="back">
          后面的内容
        </div>
      </better-slider>
    </div>
</template>
<script>

</script>

原理

布局

技术分享图片

绿色部分为 wrapper,它拥有两个子元素为 back 和 front,它的高度会被 front 撑起。黄色部分为 back,它使用绝对定位,它的高度与 wrapper 相同,值得注意的是为了提高性能,back 在用户触摸该控件是才被插入。front 与 back 同级。

关闭

组件提供关闭动画,调用组件的 close 方法使用,可以通过监听 clickBackEvent 等事件,通过传入的组件引用已调用该方法。需要注意的是,该方法并不会删除该组件,可以通过监听 closeTransitionEndEvent 事件,在其中进行自己的处理。

选项

SlidingButton 支持很多属性。

right

  • 类型:Number
  • 默认值:80
  • 作用:从左向右滑动时,右边展示宽度

left

  • 类型:Number
  • 默认值:80
  • 作用:从右向左滑动时,左边展示宽度

rightBackgroundColor

  • 类型:Number
  • 默认值:80
  • 作用:从左向右滑动时,组件底色,主要用于关闭动画

leftBackgroundColor

  • 类型:Number
  • 默认值:0
  • 作用:从右向左滑动时,组件底色,主要用于关闭动画

momentum

  • 类型:Boolean
  • 默认值:true
  • 作用:表示是否开启惯性动画

momentumTime

  • 类型:Number
  • 默认值:100
  • 作用:表示惯性动画持续时间

deceleration

  • 类型:Number
  • 默认值:0.01
  • 作用:表示惯性动画的减速度

closeTime

  • 类型:Number
  • 默认值:300
  • 作用:表示关闭动画的持续时间

trigger

  • 类型:Boolean
  • 默认值:true
  • 作用:该属性为 true 或 false 并无区别,只要该值发生改变,且用户没有触摸该组件时,就会将组件的 front 置于原始位置。当在列表中使用多个该组件时,可以使用该属性。

事件

注意:event 是事件原生参数,component 是指向该组件的引用。

clickBackEvent

  • 参数:{ Object }.{ event, component }
  • 触发时机:用户点击 back 时

clickFrontEvent

  • 参数:{ Object }.{ event, component }
  • 触发时机:用户点击 front 时

touchStartEvent

  • 参数:{ Object }.{ event, component }
  • 触发时机:用户开始触摸该组件时

closeTransitionEndEvent

  • 参数:{ Object }.{ event, component }
  • 触发时机:关闭动画结束时调用

以上是关于实现类似iOS拍照的按钮滑动功能的主要内容,如果未能解决你的问题,请参考以下文章

自己开发的 vue 滑动按钮组件 vue-better-slider

苹果操作系统ios10.1的新功能是啥

如何通过处理快门按钮自动拍照

简单的使用ios自带拍照裁剪功能

在 Xamarin IOS 的 UITableview 中更改滑动以删除按钮高度

Kotlin 实现三级菜单列表(左右滑动)+自定义ViewPager+三个ListView列表的功能