1、项目展示:
2、XML布局代码:包含两个文件,一个主页面activity_main,一个帮助页面activity_help,具体代码如下:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bg_rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/bg">
<ImageView
android:id="@+id/panda_iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/chi0000" />
<!--android:onClick="dance"-->
<ImageView
android:id="@+id/dance_iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="40dp"
android:background="@mipmap/btn_dance_normal" />
<ImageView
android:id="@+id/tip_iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentRight="true"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
android:background="@mipmap/btn_tip_normal" />
<ImageView
android:id="@+id/help_iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:background="@mipmap/help" />
<ImageView
android:id="@+id/touch_iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="20dp"
android:background="@mipmap/btn_kick_normal" />
<ImageView
android:id="@+id/sleep_iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentBottom="true"
android:layout_marginLeft="20dp"
android:layout_marginBottom="40dp"
android:background="@mipmap/btn_sleep_normal" />
<ImageView
android:id="@+id/eat_iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="20dp"
android:layout_marginBottom="40dp"
android:background="@mipmap/btn_eat_normal" />
</RelativeLayout>
activity_help.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/helpbk">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="帮助"
android:textColor="#FFF"
android:textSize="40sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:layout_margin="20dp"
android:layout_marginTop="26dp"
android:text="欢迎来到整蛊熊猫"
android:textColor="#FFF"
android:textSize="30sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_margin="20dp"
android:text="作者:BlueZ"
android:textColor="#FFF"
android:textSize="24sp" />
</RelativeLayout>
3、drawable目录下创建动画文件dance_anim.xml、eat_anim.xml、sleep_anim.xml、tip_anim.xml、touch_anim.xml,具体代码如下:
dance_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--
animation-list:帧动画
item:每一帧
drawable:每一帧引用的图片
duration:一帧图片播放的时间 单位ms
-->
<item
android:drawable="@mipmap/tiaowu0000"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0002"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0004"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0006"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0008"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0010"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0012"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0014"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0016"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0018"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0020"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0022"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0024"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0026"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0028"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0030"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0032"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0034"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0036"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0038"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0040"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0042"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0044"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0046"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0048"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0050"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0052"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0054"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0056"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0058"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0060"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0062"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0064"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0066"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0068"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0070"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0072"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0074"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0076"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0078"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0080"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0082"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0084"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0086"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0088"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0090"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0092"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0094"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0096"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0098"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0100"
android:duration="200" />
<item
android:drawable="@mipmap/tiaowu0101"
android:duration="200" />
</animation-list>
eat_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--
animation-list:帧动画
item:每一帧
drawable:每一帧引用的图片
duration:一帧图片播放的时间 单位ms
-->
<item
android:drawable="@mipmap/chi0000"
android:duration="200" />
<item
android:drawable="@mipmap/chi0002"
android:duration="200" />
<item
android:drawable="@mipmap/chi0004"
android:duration="200" />
<item
android:drawable="@mipmap/chi0006"
android:duration="200" />
<item
android:drawable="@mipmap/chi0008"
android:duration="200" />
<item
android:drawable="@mipmap/chi0010"
android:duration="200" />
<item
android:drawable="@mipmap/chi0012"
android:duration="200" />
<item
android:drawable="@mipmap/chi0014"
android:duration="200" />
<item
android:drawable="@mipmap/chi0016"
android:duration="200" />
<item
android:drawable="@mipmap/chi0018"
android:duration="200" />
<item
android:drawable="@mipmap/chi0020"
android:duration="200" />
<item
android:drawable="@mipmap/chi0022"
android:duration="200" />
<item
android:drawable="@mipmap/chi0024"
android:duration="200" />
<item
android:drawable="@mipmap/chi0026"
android:duration="200" />
<item
android:drawable="@mipmap/chi0028"
android:duration="200" />
<item
android:drawable="@mipmap/chi0030"
android:duration="200" />
<item
android:drawable="@mipmap/chi0032"
android:duration="200" />
<item
android:drawable="@mipmap/chi0034"
android:duration="200" />
<item
android:drawable="@mipmap/chi0036"
android:duration="200" />
<item
android:drawable="@mipmap/chi0038"
android:duration="200" />
<item
android:drawable="@mipmap/chi0040"
android:duration="200" />
<item
android:drawable="@mipmap/chi0042"
android:duration="200" />
<item
android:drawable="@mipmap/chi0044"
android:duration="200" />
<item
android:drawable="@mipmap/chi0046"
android:duration="200" />
<item
android:drawable="@mipmap/chi0048"
android:duration="200" />
<item
android:drawable="@mipmap/chi0050"
android:duration="200" />
<item
android:drawable="@mipmap/chi0052"
android:duration="200" />
<item
android:drawable="@mipmap/chi0054"
android:duration="200" />
<item
android:drawable="@mipmap/chi0056"
android:duration="200" />
<item
android:drawable="@mipmap/chi0058"
android:duration="200" />
<item
android:drawable="@mipmap/chi0060"
android:duration="200" />
<item
android:drawable="@mipmap/chi0062"
android:duration="200" />
<item
android:drawable="@mipmap/chi0064"
android:duration="200" />
<item
android:drawable="@mipmap/chi0066"
android:duration="200" />
<item
android:drawable="@mipmap/chi0068"
android:duration="200" />
<item
android:drawable="@mipmap/chi0070"
android:duration="200" />
<item
android:drawable="@mipmap/chi0072"
android:duration="200" />
<item
android:drawable="@mipmap/chi0074"
android:duration="200" />
<item
android:drawable="@mipmap/chi0076"
android:duration="200" />
<item
android:drawable="@mipmap/chi0078"
android:duration="200" />
<item
android:drawable="@mipmap/chi0080"
android:duration="200" />
<item
android:drawable="@mipmap/chi0082"
android:duration="200" />
<item
android:drawable="@mipmap/chi0084"
android:duration="200" />
<item
android:drawable="@mipmap/chi0086"
android:duration="200" />
<item
android:drawable="@mipmap/chi0088"
android:duration="200" />
<item
android:drawable="@mipmap/chi0089"
android:duration="200" />
</animation-list>
sleep_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--
animation-list:帧动画
item:每一帧
drawable:每一帧引用的图片
duration:一帧图片播放的时间 单位ms
-->
<item
android:drawable="@mipmap/dadun0000"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0002"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0004"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0006"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0008"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0010"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0012"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0014"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0016"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0018"
android:duration="200" />
<item
android:drawable="@mipmap/dadun0019"
android:duration="200" />
</animation-list>
tip_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--
animation-list:帧动画
item:每一帧
drawable:每一帧引用的图片
duration:一帧图片播放的时间 单位ms
-->
<item
android:drawable="@mipmap/zuoyi0000"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0002"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0004"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0006"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0008"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0010"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0012"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0014"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0016"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0018"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0020"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0022"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0024"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0026"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0028"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0030"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0032"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0034"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0036"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0038"
android:duration="200" />
<item
android:drawable="@mipmap/zuoyi0039"
android:duration="200" />
</animation-list>
touch_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--
animation-list:帧动画
item:每一帧
drawable:每一帧引用的图片
duration:一帧图片播放的时间 单位ms
-->
<item
android:drawable="@mipmap/moduzi0000"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0002"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0004"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0006"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0008"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0010"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0012"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0014"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0016"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0018"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0020"
android:duration="200" />
<item
android:drawable="@mipmap/moduzi0021"
android:duration="200" />
</animation-list>
4、Java代码包含两个Activity,其中MainActivity是主页面,HelpActivity是帮助页面,具体代码如下:
MainActivity:
package com.qianfeng.kungfupanda;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.media.AudioManager;
import android.media.Image;
import android.media.SoundPool;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private RelativeLayout bgRl;
private ImageView pandaIv;
private ImageView danceIv;
private ImageView tipIv;
private ImageView helpIv;
private ImageView touchIv;
private ImageView sleepIv;
private ImageView eatIv;
private Handler handler;
private SoundPool soundPool;
private HashMap<Integer, Integer> map;
// 重写父类onCreate 一种把以前家具全部扔掉 买一些新的家具
@Override
protected void onCreate(Bundle savedInstanceState) {
// 调用父类onCreate方法
super.onCreate(savedInstanceState);
// XML解析 加载布局
setContentView(R.layout.activity_main);
// alt+enter
initView();
initData();
setClickListener();
}
/**
* 初始化数据
*/
private void initData() {
map = new HashMap<>();
// handler原理
handler = new Handler();
// maxStream 流的最大数量 StreamType:流的类型 游戏应用通常使用AudioManager.STREAM_MUSIC srcQuality:使用0作为默认值
soundPool = new SoundPool(7, AudioManager.STREAM_MUSIC, 0);
// 转载声音到声音池对象中(Context:this ,resId:R.raw.dacnce,priority:1)
map.put(1, soundPool.load(this, R.raw.dance, 1));
map.put(2, soundPool.load(this, R.raw.gxfc, 1));
map.put(3, soundPool.load(this, R.raw.touchbody, 1));
map.put(4, soundPool.load(this, R.raw.snooze, 1));
map.put(5, soundPool.load(this, R.raw.chow, 1));
map.put(6, soundPool.load(this, R.raw.guijiao, 1));
map.put(7, soundPool.load(this, R.raw.guijiao2, 1));
}
/**
* 点击事件
*/
private void setClickListener() {
// 点击监听事件的第一种写法
// danceIv.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
//// Java三大特性:封装 继承 多态
// Toast.makeText(MainActivity.this, "点击了跳舞按钮", Toast.LENGTH_LONG).show();
// }
// });
// 点击监听事件的第二种写法
danceIv.setOnClickListener(this);
tipIv.setOnClickListener(this);
helpIv.setOnClickListener(this);
touchIv.setOnClickListener(this);
sleepIv.setOnClickListener(this);
eatIv.setOnClickListener(this);
}
// 第三种写法
// public void dance(View view) {
// Toast.makeText(MainActivity.this, "点击了跳舞按钮", Toast.LENGTH_LONG).show();
// }
/**
* 初始化View
*/
private void initView() {
bgRl = findViewById(R.id.bg_rl);
pandaIv = findViewById(R.id.panda_iv);
danceIv = findViewById(R.id.dance_iv);
tipIv = findViewById(R.id.tip_iv);
helpIv = findViewById(R.id.help_iv);
touchIv = findViewById(R.id.touch_iv);
sleepIv = findViewById(R.id.sleep_iv);
eatIv = findViewById(R.id.eat_iv);
}
@Override
public void onClick(View v) {
// v.getId() 得到当前点击视图的ID
switch (v.getId()) {
case R.id.dance_iv:
startAnim(map.get(1), R.drawable.dance_anim);
break;
case R.id.tip_iv:
startAnim(map.get(2), R.drawable.tip_anim);
break;
case R.id.help_iv:
Log.i("TAG", "HELP");
Intent intent = new Intent(MainActivity.this, HelpActivity.class);
// 开始跳转页面
startActivity(intent);
break;
case R.id.touch_iv:
startAnim(map.get(3), R.drawable.touch_anim);
break;
case R.id.sleep_iv:
startAnim(map.get(4), R.drawable.sleep_anim);
break;
case R.id.eat_iv:
startAnim(map.get(5), R.drawable.eat_anim);
break;
}
}
/**
* 通用的 用来播放动画使用
*/
private void startAnim(int soundId, int resId) {
// 动画刚触发时让所有按钮变为不可点击状态
danceIv.setClickable(false);
tipIv.setClickable(false);
helpIv.setClickable(false);
touchIv.setClickable(false);
sleepIv.setClickable(false);
eatIv.setClickable(false);
// 第一个参数:soundID 通过load返回过来的,咱们保存到了map集合中
// 第二个参数:左声道
// 第三个参数:右声道
// 第四个参数:优先级
// 第五个参数:是否循环 0:不循环 -1:永久循环
// 第六个参数:rate:速率 1:正常速度 范围:0.5~2
soundPool.play(soundId, 1, 1, 0, 0, 1);
Log.i("TAG", "跳舞");
// 将图片改成动画
pandaIv.setBackgroundResource(resId);
// 向下转型(多态的一种体现)
AnimationDrawable animationDrawable = (AnimationDrawable) pandaIv.getBackground();
// 设置动画只播放一次
animationDrawable.setOneShot(true);
// 播放帧动画
animationDrawable.start();
// 获取动画播放总时间
int time = 0;
// animationDrawable.getNumberOfFrames()得到动画的所有帧数
for (int i = 0; i < animationDrawable.getNumberOfFrames(); i++) {
// animationDrawable.getDuration(i)
time += animationDrawable.getDuration(i);
}
// 借助handler实现延时执行某段代码
handler.postDelayed(new Runnable() {
@Override
public void run() {
// 动画执行完毕之后回到初始状态
// pandaIv.setBackgroundResource(R.mipmap.chi0000);
// 让按钮动画播放完毕之后重新变为可点击状态
danceIv.setClickable(true);
tipIv.setClickable(true);
helpIv.setClickable(true);
touchIv.setClickable(true);
sleepIv.setClickable(true);
eatIv.setClickable(true);
pandaIv.setBackgroundResource(R.mipmap.timg);
soundPool.play(map.get(7), 1, 1, 0, 0, 1);
}
}, time);
}
}
HelpActivity:
package com.qianfeng.kungfupanda;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class HelpActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help);
}
}
6、AndroidManifest.xml文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.qianfeng.kungfupanda">
<application
android:allowBackup="true"
android:icon="@mipmap/qq"
android:label="QQ"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--注册Activity-->
<activity android:name=".HelpActivity">
</activity>
<activity android:name=".MainActivity">
<!--设置启动页-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
7、具体图片跟音频可参考本人上传代码资源文件