首先我们先来看一下我们今天所作任务的运行图。图一是我们刚进入时的界面,当我们点击“点击购买装备”时会跳转到图二,当我们再点击图二中的图片时,会再跳转到图一,并且相应的进度条和数值会发生变化。
训练目标:
1.掌握组件ProgressBar的使用
2.掌握startActivityForResult方法的使用
接下来我来说一下我们做这个案例的几个重要步骤:
1.在创建好项目的基础上在activity_main.xml中建立图一的布局;
在这个布局中有许多种做法,我这里是在LinearLayout线性布局中创建相应的控件,要注意这几个进度条是表格布局,在表格布局中设置进度条,进度条的控件是ProgressBar,我们要在这里设置它是横向条形的,setMax是设置进度条的最大值,setProgress是当前进度,getProgress是获取当前进度。
xml version="1.0" encoding="utf-8"?>2.新建一个布局命名为activity_shop.xml,创建如图二的布局;xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#FFFFFF" android:weightSum="1"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="美少女战士" android:layout_gravity="center_horizontal" android:layout_marginTop="20dp" android:textColor="@color/colorAccent"/> android:layout_width="150dp" android:layout_height="240dp" android:src="@drawable/figure1" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="快给小宝宝购买装备吧!" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp"/> android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> //第一行 android:layout_width="wrap_content" android:layout_height="wrap_content"> //第二行android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="生命值" android:layout_marginLeft="30dp"/> android:id="@+id/pb_life" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/> android:id="@+id/tv_life" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="80"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp"> //第三行android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="攻击力" android:layout_marginLeft="30dp"/> android:id="@+id/pb_atk" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/> android:id="@+id/tv_atk" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="80"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp"> android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="敏捷度" android:layout_marginLeft="30dp"/> android:id="@+id/pb_quick" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/> android:id="@+id/tv_quick" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="80"/>
这里要注意的就是区别与activity_main.xml中的TextView的命名,以便不知道后来要调用哪一个。
xml version="1.0" encoding="utf-8"?>3.创建ItemInfo类用于封装装备信息;xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/r1" android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/view1" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/shop2"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="20dp" android:layout_toRightOf="@id/view1"> android:id="@+id/tv_lifes" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="生命值+40" android:textSize="20sp" android:layout_marginTop="5dp"/> android:id="@+id/tv_atks" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="攻击力+60" android:textSize="20sp" android:layout_marginTop="10dp"/> android:id="@+id/tv_quicks" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="敏捷度+20" android:textSize="20sp" android:layout_marginTop="10dp"/>
按住Alt+Insert可以快速创建get.set方法。
package cn.edu.bzu.activityfigure; import java.io.Serializable; /** * Created by Lenovo on 2017/3/28. */ public class ItemInfo implements Serializable { private int life; private int acctack; private int quick; public int getLife() { return life; } public void setLife(int life) { this.life = life; } public int getAcctack() { return acctack; } public void setAcctack(int acctack) { this.acctack = acctack; } public int getQuick() { return quick; } public void setQuick(int quick) { this.quick = quick; } public ItemInfo( int life, int acctack, int quick) { this.life = life; this.acctack = acctack; this.quick = quick; } public String toString(){ return "[life="+life+",acctack="+acctack+",quick="+quick+"]"; } }4.创建一个shopActivity用来展示装备信息,当单击shopActivity的装备时,会调回MainActivity并将信息传回MainActivity。
package cn.edu.bzu.activityfigure; import android.content.DialogInterface; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.SearchView; 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); findViewById(R.id.r1).setOnClickListener(this); itemInfo=new ItemInfo(100,20,20); TextView tv_lifes=(TextView) findViewById(R.id.tv_lifes); TextView tv_atks=(TextView) findViewById(R.id.tv_atks); TextView tv_quicks=(TextView) findViewById(R.id.tv_quicks); tv_lifes.setText("生命值+"+itemInfo.getLife()); tv_atks.setText("攻击力+"+itemInfo.getAcctack()); tv_quicks.setText("敏捷度+"+itemInfo.getQuick()); } @Override public void onClick(View view){ switch (view.getId()){ case R.id.r1: Intent put=new Intent(); put.putExtra("equipment",itemInfo); setResult(1,put); finish(); break; } } }5.MainActivity是编写界面交互的代码,当点击button按钮时会跳转到shopActivity。
package cn.edu.bzu.activityfigure; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private ProgressBar pb_life; private ProgressBar pb_atk; private ProgressBar pb_quick; private TextView tv_life; private TextView tv_atk; private TextView tv_quick; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pb_life=(ProgressBar) findViewById(R.id.pb_life); pb_atk=(ProgressBar) findViewById(R.id.pb_atk); pb_quick=(ProgressBar) findViewById(R.id.pb_quick); tv_life=(TextView) findViewById(R.id.tv_life); tv_atk=(TextView) findViewById(R.id.tv_atk); tv_quick=(TextView) findViewById(R.id.tv_quick); pb_life.setMax(1000); pb_atk.setMax(1000); pb_quick.setMax(1000); } public void click(View view){ Intent intent=new Intent(this,shopActivity.class); startActivityForResult(intent,1); } @Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode,resultCode,data); if(data!=null){ if(resultCode==1){ if(requestCode==1) { ItemInfo info = (ItemInfo) data.getSerializableExtra("equipment"); updataProgress(info); } } } } private void updataProgress(ItemInfo itemInfo){ int progress1=pb_life.getProgress(); int progress2=pb_atk.getProgress(); int progress3=pb_quick.getProgress(); pb_life.setProgress(progress1+ itemInfo.getLife()); pb_atk.setProgress(progress2+itemInfo.getAcctack()); pb_quick.setProgress(progress3+itemInfo.getQuick()); tv_life.setText(pb_life.getProgress()+""); tv_atk.setText(pb_atk.getProgress()+""); tv_quick.setText(pb_quick.getProgress()+""); } }6.清单文件配置ActivityManifest.xml。
xml version="1.0" encoding="utf-8"?>运行程序就可以了!!!xmlns:android="http://schemas.android.com/apk/res/android" package="cn.edu.bzu.activityfigure"> android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> android:name=".MainActivity"> android:name="android.intent.action.MAIN" /> android:name="android.intent.category.LAUNCHER" /> android:name=".shopActivity">