最近被电子木鱼刷屏了,附近的同事也在敲木鱼....

本想着在百度上搜一个Android代码实现的down下来去装装逼(doge),但是没找到几个合适的....

so!我就自己写个简单的吧!

首先看一下电子木鱼大概的效果如下:

分析了下电子木鱼的效果主要包括以下几点:

1.点击木鱼时 木鱼放大 -> 木鱼缩小

2.点击木鱼的同时 会有文字弹出,频繁点击时 频繁弹出文字

3.文字弹出时有随机的运动轨迹

代码实现(点击木鱼时 木鱼放大 -> 木鱼缩小):

//先来看木鱼的缩放如何实现
//我选取的是xml缩放动画方式实现
//xml如下↓<set xmlns:android="http://schemas.android.com/apk/res/android"><!--点击时放大1.15倍!--><scaleandroid:duration="25"android:fromXScale="1"android:fromYScale="1"android:pivotX="50%"android:pivotY="50%"android:toXScale="1.15"android:toYScale="1.15" /><!--然后缩小--><scaleandroid:duration="1"android:fromXScale="1"android:fromYScale="1"android:pivotX="50%"android:pivotY="50%"android:startOffset="400"android:toXScale="1"android:toYScale="1" /></set>

//Java代码如下:
private Animation animation;//动画实例
private ImageButton mMuYu;//木鱼的图片按键animation = AnimationUtils.loadAnimation(getContext(), R.anim.anim_small_big);
//使用AnimationUtils载入动画mMuYu.startAnimation(animation);
//在点击时调用startAnimation()方法即可

代码实现(点击木鱼的同时 会有文字弹出,频繁点击时 频繁弹出文字):

//这部分我自己也想了一段时间
//一开始不太清楚如何频繁的创建TextView,后来请教了水友才知道可以使用rootView.addView()来实现
//即 点击的时候不断的向根布局内addView
//我的布局是用相对布局写的,在此不过多赘述,布局内仅包含木鱼图片和textView
//代码如下:
private RelativeLayout mRelativeLayout;
private TextView textView
mRelativeLayout = findViewById(R.id.muyu_layout);
//点击时调用下方代码
mRelativeLayout.addView(textView = new TextView(getContext()));
textView.setText("功德+1");
textView.setTextSize(20);
textView.setTextColor(Color.WHITE);

代码实现(文字弹出时有随机的运动轨迹):

这部分困扰了我好长时间,原因如下:并未关注过View的坐标系和布局的坐标系,动画技术不了解,绘制技术不了解。

其实这种轨迹的实现 更好的实现方式应该是用贝塞尔曲线来实现,但由于我比较菜所以我就开始取巧了。

首先来看下坐标系:坐标系主分为 Android坐标系(屏幕坐标系)和视图坐标系

Android坐标系(屏幕坐标系)即以屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向,如下图所示。

视图坐标系如下图(这图可能在博客里面传了三代了)

下面回到刚才的问题上,弹出文字的轨迹如何实现。

看原效果可知,TextView弹出后的轨迹 是先不断向上 后逐渐向横轴偏移

分解开来就好办了,可以使用属性动画ObjectAnimator为创建的TextView设置纵向和横向的动画,只要随机的改变横向坐标,就可以做到 TextView的移动轨迹随机,代码如下:

//这是不断弹出TextView的代码
mRelativeLayout.addView(textView = new TextView(getContext()));
textView.setText("功德+1");
textView.setTextSize(20);
textView.setTextColor(Color.WHITE);//下方是实现轨迹动画的代码
AnimatorSet animSet = new AnimatorSet();
ObjectAnimator anim1 = ObjectAnimator.ofFloat(textView, "translationX", number, number);
//移动到屏幕中间
ObjectAnimator anim2 = ObjectAnimator.ofFloat(textView, "translationY", number, 0f);
//从木鱼移动到上端
ObjectAnimator anim3 = ObjectAnimator.ofFloat(textView, "alpha", 1f, 0f);
//移动过程中逐渐透明
AnimatorSet.Builder builder = animSet.play(anim2);
builder.with(anim1).with(anim2).with(anim3);//三个动画一起执行
animSet.setDuration(3500);//整个过程持续3.5s
animSet.start(); // 开始播放属性动画

其中的具体参数需要根据具体视图而定。

获取某一控件的坐标可以考虑使用onWindowFocusChanged

 public void onWindowFocusChanged(boolean hasWindowFocus) {super.onWindowFocusChanged(hasWindowFocus);int[] location = new int[2];mMuYu.getLocationOnScreen(location);//获取木鱼图片的坐标Log.e("LOCATION", location[0] + "->" + location[1]);//打印top坐标//location[0] -> x坐标,location[1] -> y坐标}

最后 运行如下:

最后再加个点击计数TextView和敲击木鱼的声音即可,这里不过多赘述。

Demo回头我传到公众号上(二两仙气儿),欢迎小白一起交流学习。

Android实现的电子木鱼,功德+1...相关推荐

  1. 电子木鱼 微信小程序源码 今天你积功德了吗?

      电子木鱼已经是火了很久的小程序了,今天闲来无事自己搞着玩玩.大家没事可以部署一个放松一下心情.纯属娱乐.大家可以点击看看我部署的项目. 1.首先新建一个微信小程序,这个我就不在演示了. 2.htm ...

  2. Compose 动画api之我的电子木鱼青春版

    提示:需要对基本的compose语法有所了解` 文章目录 前言 一.总体规划 二.我的木鱼 1.敲击监听 pointerInput,detectTapGestures 2.木鱼动画 3.木鱼文字 三. ...

  3. 最近非常火的电子木鱼流量主小程序源码

    最近非常火的电子木鱼流量主小程序,希望大家也能凑个热度吧. 我看了一下那些人上线的就是手动敲木鱼,然后通过看激励视频自动敲,那么这个源码也是和他们所使用的一样 敲木鱼,功德木鱼通过模拟真实木鱼来精心养 ...

  4. 静心解压,或许你需要一个电子木鱼

    最近被一个客户翻来覆去的需求弄的心烦意乱,血压飙升.于是想起了前段时间特别火的电子木鱼. 打开微信搜索后发现排名前几的木鱼广告满天飞不说,页面还丑的可以. 行叭,谁让咱是程序员呢,咱自己做. 在头秃了 ...

  5. 电子木鱼网页版(教学+源码带注释)

    近日在网上经常看见电子木鱼的案例,但都是做的小程序,本人就突发奇想,使用css和JavaScript在网页中实现这个功能.于是便有了这个文章.有细致的讲解,也把源码都放在了最后,没有耐心的小伙伴可以直 ...

  6. 用tkinter写一个简陋版的扣一佛主陪你笑,敲木鱼功德+1(附带源码)

    #最近看地狱笑话看多了,连夜用tkinter写了一个自动化加功德的小程序,现在每天都看地狱笑话妈妈再也不怕我的功德不够了 关于tkinter的使用方法后面还会讲解的 每次学完后总是可能忘掉或者一时记不 ...

  7. Android--简单电子木鱼开发详解

    PS:素材和整个文件我都会放在最后请耐心看完~ 简单看下效果: 页面布局代码: <?xml version="1.0" encoding="utf-8"? ...

  8. 电子木鱼这么火?Python仅需50行代码实现(附代码,及素材)

    背景 效果展示 代码 素材 背景 最近在刷某音的时,发现一款电子木鱼非常的火爆.这款软件可以说是积功德的神器,敲一下功德+1,敲一下+1.成功的吸引了我的注意,便有了这个迷你项目.成功的复刻了其加功德 ...

  9. .NET MAUI 开发电子木鱼(上)

    本文介绍如何使用 .NET MAUI 开发一个电子木鱼应用.以实际的小应用开发为例,通过这个开发过程,介绍了其涉及的 .NET MAUI.Blazor.前端等相关知识点.文章涉及的应用已开源在 Git ...

最新文章

  1. neutron linux网络命令,OpenStack Neutron网络组件介绍(重要)
  2. FPGA静态时序分析基本概念
  3. golang x509包 数字证书相关介绍
  4. 创建springboot出现error:connection timed out创建springboot报错显示连接超时解决方案
  5. C#支持中文的格式化字符长度方法
  6. linux shell zsh,Linux终极shell Z Shell 用强大的zsh oh-my-zsh把Bash换掉
  7. Django的设计模式
  8. SPMetal语法用法
  9. yum命令报错 yum update File /usr/bin/yum, line 30 except KeyboardInterrupt, e: --CentOS7.5
  10. jaxws-ri下载链接
  11. 你拿苹果技术顾问怎么办?
  12. 微信小程序:强大的多功能图片处理器
  13. WORD中如何调整字间距
  14. [C语言] 0.5倍速讲解世纪大战 有趣的C语言玩法
  15. mac怎么压缩pdf文件最小
  16. 探究雷达(RADAR)工作原理
  17. 利用计算机打字教学设计,四年级全一册信息技术教案-第1课正确的坐姿和指法--基本键打字练习 河大版...
  18. 【Houdini MAYA】从MAYA到Houdini入门学习笔记(三)
  19. 苹果手机显示服务器返回数据异常,iOS 请求数据 返回-9843 的错误
  20. 一文详解!对于企业来说,商业智能BI到底有什么意义

热门文章

  1. jenkin swindows启动_Windows 下通过命令行快速启动 nginx
  2. 老王学java8周第一天
  3. K 个一组翻转链表(递归,Kotlin)
  4. 数据通信基础 - 信道特性(奈奎斯特定理、香农定理 )
  5. Hive基本SQL操作
  6. [快讯]QCon北京2014 slides下载、视频发布排期通知
  7. linux 光盘刻录命令,在Linux操作系统中使用命令进行光盘刻录该怎么做?
  8. P3380 【模板】二逼平衡树(树套树)
  9. 教师计算机提升返岗总结,语文老师返岗研修心得体会
  10. WxConn:统计微信好友数与加入群聊的人数