Android开发购买宠物装备
要点:
- 使用Intent回传数据
- Activity之间的跳转
- startActivityForResult( Intent intent,int requestCode)在页面一中开启页面二
- setResult(int resultCode, Intent data)页面二回传数据到页面一
- onActivityResult()页面二被销毁时,调用页面一中的onActivityResult()来接收回传回来的数据
实现步骤
①宠物显示界面的设计与实现
②购买装备界面的设计与实现
③创建封装装备信息的实体类
④购买装备界面逻辑代码的设计与实现
⑤宠物显示界面逻辑代码的设计与实现
activity_main.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/loading"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv_head"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="150dp"
android:src="@drawable/head"/>
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/iv_head"
android:layout_margin="10dp"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/regist_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="用户名:"
android:textSize="25sp"/>
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/tv_name"
android:hint="请输入用户名"
android:background="@null"
android:textSize="25sp"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/regist_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<TextView
android:id="@+id/tv_psw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="密 码:"
android:textSize="25sp"/>
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/tv_psw"
android:hint="请输入密码"
android:background="@null"
android:inputType="textPassword"
android:textSize="25sp"/>
</RelativeLayout>
</LinearLayout>
<Button
android:id="@+id/btn_send"
android:layout_width="160dp"
android:layout_height="48dp"
android:layout_below="@id/layout"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="注册"
android:textColor="#FFFFFF"
android:textSize="25sp"
android:textStyle="bold"/>
</RelativeLayout>
页面:
activity_show2.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/loading"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginBottom="15dp"
android:orientation="horizontal"
android:padding="15dp">
<ImageView
android:id="@+id/pet_imgv"
android:layout_width="0dp"
android:layout_height="150dp"
android:layout_weight="1"
android:background="@drawable/baby">
</ImageView>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:orientation="vertical"
android:paddingLeft="20dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:textSize="14sp"
android:textStyle="bold">
</TextView>
<TextView
android:id="@+id/tv_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 码:"
android:textSize="14sp"
android:textStyle="bold">
</TextView>
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/pet_dialog_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="25dp"
android:text="主人快给小宝宝买装备吧!"
android:textSize="25sp"></TextView>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="50dp">
<TableRow>
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="生命值:"
android:textColor="@android:color/black"
android:textSize="18sp">
</TextView>
<ProgressBar
android:id="@+id/ProgressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2"></ProgressBar>
<TextView
android:id="@+id/tv_life_progress"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="0"
android:textColor="#000000"
android:textSize="18sp">
</TextView>^
</TableRow>
<TableRow>
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="攻击力:"
android:textColor="@android:color/black"
android:textSize="18sp" />
<ProgressBar
android:id="@+id/ProgressBar2"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2" />
<TextView
android:id="@+id/tv_attack_progress"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="0"
android:textColor="#000000"
android:textSize="18sp"></TextView>
</TableRow>
<TableRow>
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="敏 捷:"
android:textColor="@android:color/black"
android:textSize="18sp" />
<ProgressBar
android:id="@+id/ProgressBar3"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2" />
<TextView
android:id="@+id/tv_speed_progress"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="0"
android:textColor="#000000"
android:textSize="18sp">
</TextView>
</TableRow>
</TableLayout>
<Button
android:id="@+id/btn_baby"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_gravity="center"
android:text="立即购买 GO!"
android:textColor="#ffffff"
android:textSize="18sp"
android:onClick="click"
android:textStyle="bold"/>
</LinearLayout>
页面:
activity_shop.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/rl"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/loading"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#307f7f7f"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="5dp">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@android:drawable/ic_menu_info_details"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="商品名称"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_life"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生命值"
android:textSize="13sp"/>
<TextView
android:id="@+id/tv_attack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="攻击力"
android:textSize="13sp"/>
<TextView
android:id="@+id/tv_speed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="速度"
android:textSize="13sp"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
页面:
MainActivity.java文件代码:
package com.example.userregist;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.nio.file.FileVisitOption;
public class MainActivity extends AppCompatActivity {
private EditText et_name;
private EditText et_passward;
private Button btn_send;
private EditText et_password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_name = (EditText) findViewById(R.id.et_name);//找到账号输入框
et_passward = findViewById(R.id.et_password);//找到密码输入框
btn_send = findViewById(R.id.btn_send);//找到登录按钮
btn_send.setOnClickListener(new View.OnClickListener() {//设置按钮的点击事件
@Override
public void onClick(View view) {
passDaata();//调用方法
}
});
}
private void passDaata() {
Intent intent = new Intent(this,ShowActivity2.class);//创建意图并传入参数
intent.putExtra("name",et_name.getText().toString().trim());//获得账号信息并传递账号信息
intent.putExtra("password",et_passward.getText().toString().trim());//获得密码信息并传递密码信息
startActivity(intent);//开启新的页面ShowActivity2。
}
}
ItemInfo.java文件代码:
封装一个装备类
package com.example.userregist;
import java.io.Serializable;
public class ItemInfo implements Serializable {
private String name;//名字
private int acctract;//攻击力
private int life;//生命值
private int speed;//敏捷
public ItemInfo(String name, int acctract, int life, int speed) {
this.name = name;
this.acctract = acctract;
this.life = life;
this.speed = speed;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAcctract() {
return acctract;
}
public void setAcctract(int acctract) {
this.acctract = acctract;
}
public int getLife() {
return life;
}
public void setLife(int life) {
this.life = life;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
ShowActivity2.java文件代码:
package com.example.userregist;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.io.Serializable;
import java.nio.file.FileVisitOption;
public class ShowActivity2 extends AppCompatActivity {
private ProgressBar mProgressBar1;
private ProgressBar mProgressBar2;
private ProgressBar mProgressBar3;
private TextView mLifeTV;
private TextView mAttackTV;
private TextView mSpeedTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show2);
Intent intent = getIntent();// 获得意图对象
String name = intent.getStringExtra("name");//获取账号信息
String password = intent.getStringExtra("password");//获取密码信息
TextView tv_name = ((TextView) findViewById(R.id.tv_name));//获得本页面的账号框TextView的名字
TextView tv_passward = ((TextView) findViewById(R.id.tv_password));//获得本页面的密码框TextView的名字
tv_name.setText("用户名:" + name);//显示账号到账号框TextView
tv_passward.setText("密 码:" + password);//显示密码到密码框TextView
mLifeTV = (TextView) findViewById(R.id.tv_life_progress);//找到进度条后面的数据
mAttackTV = (TextView) findViewById(R.id.tv_attack_progress);
mSpeedTV = (TextView) findViewById(R.id.tv_speed_progress);
initProgress();//初始化进度条
}
private void initProgress() {
this.mProgressBar1 = (ProgressBar) findViewById(R.id.ProgressBar1);//找到进度条
ProgressBar mProgressBar1 = this.mProgressBar1;
this.mProgressBar2 = (ProgressBar) findViewById(R.id.ProgressBar2);
ProgressBar mProgressBar2 = this.mProgressBar2;
this.mProgressBar3 = (ProgressBar) findViewById(R.id.ProgressBar3);
ProgressBar mProgressBar3 = this.mProgressBar3;
mProgressBar1.setMax(100);//设置进度条最大值
mProgressBar2.setMax(100);
mProgressBar3.setMax(100);
}
public void click(View v) {//开启商店页面
Intent intent = new Intent(this, ShopActivity.class);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
//接收商店页面回传的数据
if (data != null) {
if (requestCode == 1) {
if (resultCode == 1) {
ItemInfo info = (ItemInfo) data.getSerializableExtra("equipment");
updateProgress(info);//更新进度条和进度条后面的数据
}
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private void updateProgress(ItemInfo info) {
int progress1 = mProgressBar1.getProgress();//获取进度条现在的数据
int progress2 = mProgressBar2.getProgress();
int progress3 = mProgressBar3.getProgress();
mProgressBar1.setProgress(progress1 + info.getLife());//显示进度条数据(现在的加上购买装备增加的)
mProgressBar2.setProgress(progress2 + info.getAcctract());
mProgressBar3.setProgress(progress3 + info.getSpeed());
mLifeTV.setText(mProgressBar1.getProgress() + " ");
mSpeedTV.setText(mProgressBar3.getProgress() + " ");
mAttackTV.setText(mProgressBar2.getProgress() + " ");
}
}
ShopActivity.java页面代码
package com.example.userregist;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ShopActivity extends AppCompatActivity implements View.OnClickListener {
private ItemInfo itemInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shop);
this.itemInfo = new ItemInfo("金剑", 100, 20, 20);//实例化装备类
ItemInfo itemInfo = this.itemInfo;
findViewById(R.id.rl).setOnClickListener(this);
TextView mlifeTV = ((TextView) findViewById(R.id.tv_name));//找到页内的控件
TextView mNameTV = ((TextView) findViewById(R.id.tv_life));
TextView mSpeed = ((TextView) findViewById(R.id.tv_speed));
TextView mAccart = ((TextView) findViewById(R.id.tv_attack));
mlifeTV.setText("生命值+" + itemInfo.getLife());//显示数据
mAccart.setText("攻击力+" + itemInfo.getAcctract());
mNameTV.setText(itemInfo.getName() + " ");
mSpeed.setText("敏捷+" + itemInfo.getSpeed());
}
@Override
public void onClick(View view) {
switch (view.getId()) {//回传数据
case R.id.rl:
Intent intent = new Intent();
intent.putExtra("equipment", itemInfo);
setResult(1, intent);
finish();
break;
}
}
}
参考图书《Android移动开发基础案例教程》