[安卓Android] 仿微信拍一拍功能实现及代码

[安卓Android] 仿微信拍一拍功能实现及代码,第1张

概述主要介绍拍一拍图标的实现以及应用。注:为了偷懒,圆形ImageView用的是我自己的一个ShapeImageView控件实现的,以及RecyclerView的适配器,这些都封装在libs下的aar包里边。底部有传送门 。视频展示 1.图标抖动//摆幅动画privateValueAnimatormValAnim;//摆幅大小

主要介绍拍一拍图标的实现以及应用。

注:为了偷懒,圆形ImageVIEw用的是我自己的一个ShapeImageVIEw控件实现的,以及RecyclerVIEw的适配器,

这些都封装在libs下的aar包里边。

底部有传送门 。

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" ID="jCFykOUa-1593260108608" src="https://player.bilibili.com/player.HTML?aID=626170270"></iframe>

视频展示

 

1.图标抖动
//摆幅动画private ValueAnimator mValAnim;//摆幅大小private float mPatPower = 8;//摆幅次数private int mPatCount = 3;//震动时间private long[] mVibratorTimings = new long[] { 0, 50, 150, 50 };public voID init() {    mValAnim = new ValueAnimator();    //动画更新事件监听器    mValAnim.addUpdateListener(anim -> {        float val = (float) anim.getAnimatedValue();        //左右旋转        setRotation( val );        //左右移动        setTranslationX( val );    });}/** * 构建设置 */public voID build() {     loat[] val = new float[ ( mPatCount * 2 ) + 1 ];    for (int i = 0; i < val.length; i++) {        if( i < val.length - 1 ) {            //左右摆幅( -5, 5, -5, 5 )            val[ i ] = i % 2 == 0 ? -mPatPower : mPatPower;        }else {            //最后一帧复位            val[ i ] = 0;        }    }   mValAnim.setfloatValues( val );}/** * 拍一拍 */public voID startPat() {    //拍一拍动画    mValAnim.start();    //设置震动    Utils.startVibrator( getContext(), -1, mVibratorTimings );}
2.双击
private static long firstTime = 0;/** * 双击 *** 作 * @param time    间隔时间 * @param call    回调。false:第一次单击,true:双击 */public static voID doubletouch(long time, Consumer<Boolean> call) {    long secondTime = System.currentTimeMillis();    if( secondTime - firstTime > time ) {        firstTime = secondTime;        //第一次通知        if( call != null ) call.accept( false );    } else {        //第二次通知        if( call != null ) call.accept( true );    }}
3.3D震动
在manifest清单中添加震动权限<!-- 震动权限 --><uses-permission androID:name="androID.permission.VIBRATE" />/** * 开始震动 * @param context       上下文 * @param repeat        循环次数。-1:仅一次 * @param timings       [0]:震动延迟、[1]:震动时长、[2]:震动延迟、[3]:震动时长... */public static voID startVibrator(@NonNull Context context, int repeat, long... timings) {    Vibrator v = (Vibrator) context.getSystemService( Context.VIBRATOR_SERVICE );    if( v == null ) return;    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {        v.vibrate( VibrationEffect.createWaveform( timings, repeat ) );    }else {        v.vibrate( timings, repeat );    }}
4.拍一拍间隔
//间隔时长private long mIntervalMillis = 5000;//当前间隔private long mCurrentMillis = 0;/** * 间隔检查 * @return      间隔是否超时 */private boolean checkInterval() {    if( mIntervalMillis <= 0 ) return true;    //间隔时间初始化    if( mCurrentMillis == 0 ) mCurrentMillis = System.currentTimeMillis() - mIntervalMillis;    //在间隔时间内    if( mCurrentMillis + mIntervalMillis > System.currentTimeMillis() ) {        return false;    }    mCurrentMillis = System.currentTimeMillis();    return true;}

Demo传送门:拍一拍Demo

拍一拍控件传送门:PatView

ShapeImageVIEw传送门:ShapeImageView

Adapter传送门:BaseRecyclerViewAdapter

总结

以上是内存溢出为你收集整理的[安卓/Android] 仿微信拍一拍功能实现及代码全部内容,希望文章能够帮你解决[安卓/Android] 仿微信拍一拍功能实现及代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存