热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现简易版弹钢琴效果

这篇文章主要为大家详细介绍了Android实现简易版弹钢琴效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android实现弹钢琴效果展示的具体代码,供大家参考,具体内容如下

目标效果:

1.drawable下新建button_selector.xml页面:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 
 
 

2.drawable下新建button.xml页面:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 
 
 
 
 
 
 

3.drawable下新建button_pressed.xml页面:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 
 
 
 
 
 
 

4.新建PanioMusic.java类

package com.example.weixu.view;
 
/**
 * 音乐播放帮助类
 */
 
import java.util.HashMap;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
 
import com.example.weixu.playpanio.R;
 
public class PanioMusic {
 // 资源文件
 int Music[] = {R.raw.do1, R.raw.re2, R.raw.mi3, R.raw.fa4, R.raw.sol5,
 R.raw.la6, R.raw.si7,};
 SoundPool soundPool;
 HashMap soundPoolMap;
 
 public PanioMusic(Context context) {
 soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100);
 soundPoolMap = new HashMap();
 for (int i = 0; i 

5.activity_main.xml页面:


 
 
 
 

6.MainActivity.java页面:

package com.example.weixu.playpanio;
 
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
 
import com.example.weixu.view.PanioMusic;
 
public class MainActivity extends Activity {
 private Button button[];// 按钮数组
 private PanioMusic utils;// 工具类
 private View parent;// 父视图
 private int buttonId[];// 按钮id
 private boolean havePlayed[];// 是否已经播放了声音,当手指在同一个按钮内滑动,且已经发声,就为true
 private View keys;// 按钮们所在的视图
 private int pressedkey[];
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 init();
 parent = (View) findViewById(R.id.llparent);
 parent.setClickable(true);
 
 parent.setOnTouchListener(new OnTouchListener() {
 
 @Override
 public boolean onTouch(View v, MotionEvent event) {
 int temp;
 int tempIndex;
 int pointercount;
 pointercount = event.getPointerCount();
 for (int count = 0; count = temp - 1; i--) {
   // 当在两端的按钮时,会有一边越界
   if (i <0 || i >= button.length) {
   continue;
   }
   if (isInScale(event.getX(count),
   event.getY(count), button[i])) {// 在某个按键内
   moveflag = true;
   if (i != temp) {// 在相邻按键内
   boolean laststill = false;
   boolean nextstill = false;
   // 假设手指已经从上一个位置抬起,但是没有真的抬起,所以不移位
   pressedkey[count] = -1;
   for (int j = 0; j = 0) {
   pressedkey[t] = pressedkey[t + 1];
   } else {
   pressedkey[t] = -1;
   }
   } else {
   pressedkey[t] = -1;
   }
 
   }
   for (int i = 0; i  button.getLeft() && x  button.getTop() + keys.getTop()
 && y  button[i].getLeft() && x  button[i].getTop() + keys.getTop()
  && y 

7.AndroidManifest.xml页面对某个Activity页面进行设置横屏

android:screenOrientation="landscape"

8.另外,每个按键的音效需要提前导入res下raw文件夹中。

源码:点击打开链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
author-avatar
mobiledu2502857827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有