主要介绍拍一拍图标的实现以及应用。
注:为了偷懒,圆形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] 仿微信拍一拍功能实现及代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)