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>