20. “我”模块(二)之星座

上一节对“我”模块(一)进行了综述(可参见 “我”模块(一) 进行了解),接下来将从“我”模块(二)开始详细介绍:

知识点

  • 掌握“日历”界面的开发,使用日历展示当前年份
  • 掌握“星座”界面的开发,选择不同的星座展示不同的运势
  • 掌握“涂鸦”界面的开发,实现图画的绘制功能
  • 掌握“地图”界面的开发,可以定位一个指定地点

星座

任务综述:
“星座”界面主要用于展示被切换的星座的名称、日期、头像、图标、简介、整体运势、爱情运势、事业学业、财富运势、健康运势以及详细信息。为了界面的美观,在界面右下角会设置不断冒出心形泡泡的效果。

3. “星座”界面

任务分析:
“星座”界面主要用于展示被切换的星座的名称、日期、头像、图标、简介、整体运势、爱情运势、事业学业、财富运势、健康运势以及心形泡泡的效果,界面效果如图所示。

“星座”界面

任务实施:
(1)创建“星座”界面:ConstellationActivity&activity_constellation。

(2)导入界面图片(6个)。

(3)引入BubbleViews库。该项目中的心形泡泡效果是通过引入第三方库BubbleViews实现的。在AS中,选择File/New/Import Module选项把心形泡泡的框架导入项目,选中项目,右击选择Open Module Settings/Dependencies/+/Module Dependency选项卡/+/Module Dependency选项/加入心形泡泡框架,框架如图所示。


心形泡泡框架

(4)放置界面控件。在布局文件中,放置一个HeartLayout自定义控件显示心形泡泡;通过<include>标签将activity_constellation_content.xml(局部布局)引入。

activity_constellation.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">
    <include layout="@layout/activity_constellation_content" />
    <com.itheima.heartlayout.HeartLayout
        android:id="@+id/heart_layout"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_gravity="bottom|right" />
</FrameLayout>

(5)放置activity_constellation_content.xml文件中的控件。
7个ImageView控件,其中1个ImageView控件用于显示星座头像,1个ImageView控件用于显示星座图标,剩余5个ImageView控件分别用于显示整体运势、爱情运势、事业学业、财富运势以及健康运势的图标;
17个TextView控件,其中1个TextView控件用于显示星座名称,1个TextView控件用于显示星座日期,1个TextView控件用于显示星座介绍信息,4个TextView控件用于显示整体运势、爱情运势、事业学业、财富运势的文本,10个TextView控件分别是用于显示整体运势、爱情运势、事业学业、财富运势以及健康运势的文本与详细信息;
4个RatingBar控件,分别用于显示整体运势、爱情运势、事业学业、财富运势的星级信息。
activity_constellation_content.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="180dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:background="@drawable/constellation_bg"
            android:orientation="vertical">
            <include layout="@layout/main_title_bar" />
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="fill_parent"
                android:layout_marginLeft="40dp">
                <ImageView
                    android:id="@+id/iv_head"
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:scaleType="fitXY" />
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="match_parent"
                    android:layout_marginLeft="15dp"
                    android:layout_toRightOf="@id/iv_head"
                    android:orientation="vertical">
                    <LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="8dp"
                        android:gravity="center_vertical"
                        android:orientation="horizontal">
                        <ImageView
                            android:id="@+id/iv_icon"
                            android:layout_width="18dp"
                            android:layout_height="18dp"
                            android:scaleType="fitXY" />
                        <TextView
                            android:id="@+id/tv_name"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="4dp"
                            android:textColor="@android:color/white"
                            android:textSize="18sp" />
                    </LinearLayout>
                    <TextView
                        android:id="@+id/tv_date"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="4dp"
                        android:textColor="@android:color/white"
                        android:textSize="18sp" />
                </LinearLayout>
            </RelativeLayout>
        </LinearLayout>
        <TextView
            android:id="@+id/tv_info"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="8dp"
            android:background="@color/constellation_info_bg_color"
            android:padding="6dp"
            android:textColor="@color/constellation_info_color"
            android:textSize="14sp" />
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp">
            <LinearLayout
                android:id="@+id/ll_whole"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="整体运势:"
                    android:textColor="@color/constellation_info_color2"
                    android:textSize="12sp" />
                <RatingBar
                    android:id="@+id/rb_whole"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:progressTint="@color/rating_bar_color"
                    android:rating="2.5" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="爱情运势:"
                    android:textColor="@color/constellation_info_color2"
                    android:textSize="12sp" />
                <RatingBar
                    android:id="@+id/rb_love"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:progressTint="@color/rating_bar_color"
                    android:rating="2.5" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/ll_whole"
                android:layout_marginTop="4dp"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="事业学业:"
                    android:textColor="@color/constellation_info_color2"
                    android:textSize="12sp" />
                <RatingBar
                    android:id="@+id/rb_career"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:progressTint="@color/rating_bar_color"
                    android:rating="2.5" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_below="@id/ll_whole"
                android:layout_marginTop="4dp"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="财富运势:"
                    android:textColor="@color/constellation_info_color2"
                    android:textSize="12sp" />
                <RatingBar
                    android:id="@+id/rb_money"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:progressTint="@color/rating_bar_color"
                    android:rating="2.5" />
            </LinearLayout>
        </RelativeLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="horizontal">
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:scaleType="fitXY"
                android:src="@drawable/whole_icon" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="4dp"
                android:text="整体运势"
                android:textColor="@color/whole_text_color"
                android:textSize="14sp" />
        </LinearLayout>
        <TextView
            android:id="@+id/tv_whole"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="@color/constellation_info_color2"
            android:textSize="12sp" />
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="horizontal">
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:scaleType="fitXY"
                android:src="@drawable/love_icon" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="4dp"
                android:text="爱情运势"
                android:textColor="@color/love_text_color"
                android:textSize="14sp" />
        </LinearLayout>
        <TextView
            android:id="@+id/tv_love"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="@color/constellation_info_color2"
            android:textSize="12sp" />
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="horizontal">
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:scaleType="fitXY"
                android:src="@drawable/career_icon" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="4dp"
                android:text="事业学业"
                android:textColor="@color/career_text_color"
                android:textSize="14sp" />
        </LinearLayout>
        <TextView
            android:id="@+id/tv_career"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="@color/constellation_info_color2"
            android:textSize="12sp" />
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="horizontal">
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:scaleType="fitXY"
                android:src="@drawable/money_icon" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="4dp"
                android:text="财富运势"
                android:textColor="@color/money_text_color"
                android:textSize="14sp" />
        </LinearLayout>
        <TextView
            android:id="@+id/tv_money"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="@color/constellation_info_color2"
            android:textSize="12sp" />
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="horizontal">
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:scaleType="fitXY"
                android:src="@drawable/health_icon" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="4dp"
                android:text="健康运势"
                android:textColor="@color/health_text_color"
                android:textSize="14sp" />
        </LinearLayout>
        <TextView
            android:id="@+id/tv_health"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="@color/constellation_info_color2"
            android:textSize="12sp" />
    </LinearLayout>
</ScrollView>

(6)修改colors.xml文件。“星座”界面中有几种颜色用于修饰文本或者背景,因此为了便于后续调用,在res/values文件夹的colors.xml文件中添加如下代码。

    <color name="constellation_info_color">#7f8080</color>
    <color name="constellation_info_bg_color">#f7f2fd</color>
    <color name="rating_bar_color">#702ec4</color>
    <color name="constellation_info_color2">#454545</color>
    <color name="whole_text_color">#7fbee4</color>
    <color name="love_text_color">#ff8cb4</color>
    <color name="career_text_color">#b29ddd</color>
    <color name="money_text_color">#f0c062</color>
    <color name="health_text_color">#9cd47a</color>

4. 创建ConstellationBean

任务分析:
项目中星座属性包括星座Id、星座选择界面的带色图标、白色星座图标、星座名称、星座日期、星座头像、星座介绍信息、整体运势星级、爱情运势星级、事业学业星级、财富运势星级、整体运势星级、爱情运势信息,为了便于后续对这些属性进行操作,因此创建一个ConstellationBean类用于存放这些属性。

任务实施:
在bean包中创建ConstellationBean,在该类中创建星座所需的属性。

ConstellationBean.java

public class ConstellationBean {
    private int id;        //星座Id
    private String img;   //星座选择界面的带色星座图标
    private String icon;  //白色星座图标
    private String name;  //星座名称
    private String date;  //星座日期
    private String head;  //星座头像
    private String info;  //星座介绍信息
    private int whole;   //整体运势星级
    private int love;    //爱情运势星级
    private int career;  //事业学业星级
    private int money;   //财富运势星级
    private String whole_info;  //整体运势内容
    private String love_info;   //爱情运势内容
    private String career_info; //事业学业内容
    private String money_info;  //财富运势内容
    private String health_info; //健康运势内容
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getHead() {
        return head;
    }
    public void setHead(String head) {
        this.head = head;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public int getWhole() {
        return whole;
    }
    public void setWhole(int whole) {
        this.whole = whole;
    }
    public int getLove() {
        return love;
    }
    public void setLove(int love) {
        this.love = love;
    }
    public int getCareer() {
        return career;
    }
    public void setCareer(int career) {
        this.career = career;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    public String getWhole_info() {
        return whole_info;
    }
    public void setWhole_info(String whole_info) {
        this.whole_info = whole_info;
    }
    public String getLove_info() {
        return love_info;
    }
    public void setLove_info(String love_info) {
        this.love_info = love_info;
    }
    public String getCareer_info() {
        return career_info;
    }
    public void setCareer_info(String career_info) {
        this.career_info = career_info;
    }
    public String getMoney_info() {
        return money_info;
    }
    public void setMoney_info(String money_info) {
        this.money_info = money_info;
    }
    public String getHealth_info() {
        return health_info;
    }
    public void setHealth_info(String health_info) {
        this.health_info = health_info;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
}

5. “星座”界面数据

任务分析:
“星座”界面由“星座图片”与“星座数据”组成,其中图片是通过Tomcat的ROOT文件夹中创建一个图片文件夹constellation存放的,数据是通过在ROOT文件夹中创建一个constellation_data.json文件存放的。

任务实施:
(1)创建“星座”界面图片存放的文件夹。在Tomcat的ROOT/topline/img文件夹中创建一个constellation文件夹,用于存放“星座”界面的图片。

(2)在Tomcat服务器中创建“星座”界面数据文件。在Tomcat的ROOT/topline目录中创建一个constellation_data.json文件,该文件用于存放“星座”界面需要加载的数据。

constellation_data.json

[
{
"id":1,
"name":"白羊座",
"head":"http://172.27.35.1:8080/newsdemo/img/constellation/baiyang_head_icon.png",
"img":"http://172.27.35.1:8080/newsdemo/img/constellation/baiyang_icon.png",
"icon":"http://172.27.35.1:8080/newsdemo/img/constellation/baiyang.png",
"date":"3.21~4.19",
"info":"白羊座的人热情冲动、爱冒险、慷慨、天不怕地不怕而且一旦下定决心,不到黄河心不死,排除万难的要达到目的。",
"whole":3,
"love":3,
"career":4,
"money":4,
"whole_info":"今天对爱情的向往没那么强烈,即使是遇到喜欢的人表现都相比之前要冷静不少,不容易擦出爱火花。财运有好转,投资上会有收获,理财规划好,消费上能够精打细算,货比三家。",
"love_info":"身边出现不少爱慕者,有伴者感情生活稳定。",
"career_info":"做事效率高,但是有点急进,要注意细节之处。",
"money_info":"有得财机会,赚钱轻松,还会得偏财的运气。",
"health_info":"要多爱惜身体,不要忽略了健康。"
},
……
{
"id":12,
"name":"双鱼座",
"head":"http://172.27.35.1:8080/newsdemo/img/constellation/shuangyu_head_icon.png",
"img":"http://172.27.35.1:8080/newsdemo/img/constellation/shuangyu_icon.png",
"icon":"http://172.27.35.1:8080/newsdemo/img/constellation/shuangyu.png",
"date":"2.19~3.20",
"info":"双鱼座集合了所有星座的优缺点于一身,同时受水象星座的情绪化影响,使他们原来复杂的性格又添加了更复杂的一笔。双鱼座的人最大的优点是愿意帮助别人,甚至是牺牲自己。",
"whole":3,
"love":3,
"career":3,
"money":3,
"whole_info":"一个人的时候压抑的情绪特别容易爆发(可能你比较感性吧),可以多接触人群,能够帮助你排解忧郁。工作稳定上升,与同事互动良好,洽谈事务也可在今天进行。对金钱比较迟钝,不要盲目操作。",
"love_info":"恋爱中的人别对爱人说谎,心里有事就说出来。",
"career_info":"职场很容易妥协、顺从,太软弱易被人欺负。",
"money_info":"财运不太好,进账不多,但起码没有金钱麻烦。",
"health_info":"身体变得更加健康,小病小痛开始消失。"
}
]

(3)解析JSON数据。由于从Tomcat服务器中获取的JSON格式的数据不能直接加载到界面上,因此需要在utils包的JsonParse类中创建一个getConstellationList()方法,用于解析“星座”界面获取的JSON数据,在JsonParse类中需要添加如下代码:

 public List<ConstellationBean> getConstellaList(String json) {
        //使用gson库解析JSON数据
        Gson gson = new Gson();
        //创建一个TypeToken的匿名子类对象,并调用对象的getType()方法
        Type listType = new TypeToken<List<ConstellationBean>>() {
        }.getType();
        //把获取到的信息集合存到constellaList中
        List<ConstellationBean> constellaList = gson.fromJson(json, listType);
        return constellaList;
    }

(4)创建星座信息表。由于“星座”界面需要根据星座Id查询具体星座的详细信息,因此需要把获取的十二星座信息保存到数据库,创建一个CONSTELLATION星座信息表,在sqlite包中的SQLiteHelper类中的“public static final String U_USERINFO = "userinfo"; //用户信息”语句下方添加如下代码:

 public static final String CONSTELLATION = "constellation";//十二星座信息

在SQLiteHelper类中创建一个星座信息表,具体代码如下:

       /**
         * 创建十二星座信息表
         */
        db.execSQL("CREATE TABLE  IF NOT EXISTS " + CONSTELLATION + "( "
                + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                + "c_id INT, "               //星座id
                + "name VARCHAR, "          //星座名称
                + "head VARCHAR, "          //头像
                + "img VARCHAR,"            //图标
                + "icon VARCHAR,"           //白色图标
                +"date VARCHAR,"            //日期
                +"info VARCHAR,"            //星座信息
                +"whole INT,"               //整体运势
                +"love INT,"                //爱情运势
                +"career INT,"             //事业学业
                +"money INT,"              //财富运势
                +"whole_info VARCHAR,"   //整体运势信息
                +"love_info VARCHAR,"    //爱情运势信息
                +"career_info VARCHAR," //事业学业信息
                +"money_info VARCHAR,"  //财富运势信息
                +"health_info VARCHAR"  //健康运势信息
                + ")");

在SQLiteHelper类的onUpgrade()方法中的“ db.execSQL("DROP TABLE IF EXISTS " + U_USERINFO);”语句下方添加:

  db.execSQL("DROP TABLE IF EXISTS " + COLLECTION_NEWS_INFO);

(5)保存到星座数据到数据库。由于十二星座信息数据需要保存到数据库,因此utils包中的DBUtils类中创建一个saveConstellationInfo()方法保存到十二星座的信息数据。

    /**
     * 保存十二星座信息
     */
    public void saveConstellationInfo(List<ConstellationBean> list) {
        Cursor cursor = db.rawQuery("SELECT * FROM " + SQLiteHelper.CONSTELLATION, null);
        if (cursor.getCount() != 0)//添加数据时,如果星座表中有数据,则在添加新数据之前需删除旧数据
        {
            //删除表中的数据
            db.execSQL("DELETE FROM " + SQLiteHelper.CONSTELLATION);
        }
        for (ConstellationBean bean : list) {
            ContentValues cv = new ContentValues();
            cv.put("c_id", bean.getId());
            cv.put("name", bean.getName());
            cv.put("head", bean.getHead());
            cv.put("img", bean.getImg());
            cv.put("icon", bean.getIcon());
            cv.put("date", bean.getDate());
            cv.put("info", bean.getInfo());
            cv.put("whole", bean.getWhole());
            cv.put("love", bean.getLove());
            cv.put("career", bean.getCareer());
            cv.put("money", bean.getMoney());
            cv.put("whole_info", bean.getWhole_info());
            cv.put("love_info", bean.getLove_info());
            cv.put("career_info", bean.getCareer_info());
            cv.put("money_info", bean.getMoney_info());
            cv.put("health_info", bean.getHealth_info());
            db.insert(SQLiteHelper.CONSTELLATION, null, cv);
        }
    }

(6)根据星座Id从数据库中获取对应星座的信息。由于“星座”界面根据星座Id查询具体星座的详细信息。因此需要在utils包的DBUtils类中创建一个getConstellationInfo()方法以获取对应星座的信息数据,具体代码如下所示:

    /**
     * 根据id获取星座信息
     */
    public ConstellationBean getConstellationInfo(int c_id) {
        String sql = "SELECT * FROM " + SQLiteHelper.CONSTELLATION + " WHERE c_id=?";
        Cursor cursor = db.rawQuery(sql, new String[]{c_id + ""});
        ConstellationBean bean = null;
        while (cursor.moveToNext()) {
            bean = new ConstellationBean();
            bean.setName(cursor.getString(cursor.getColumnIndex("name")));
            bean.setHead(cursor.getString(cursor.getColumnIndex("head")));
            bean.setImg(cursor.getString(cursor.getColumnIndex("img")));
            bean.setIcon(cursor.getString(cursor.getColumnIndex("icon")));
            bean.setDate(cursor.getString(cursor.getColumnIndex("date")));
            bean.setInfo(cursor.getString(cursor.getColumnIndex("info")));
            bean.setWhole(cursor.getInt(cursor.getColumnIndex("whole")));
            bean.setLove(cursor.getInt(cursor.getColumnIndex("love")));
            bean.setCareer(cursor.getInt(cursor.getColumnIndex("career")));
            bean.setMoney(cursor.getInt(cursor.getColumnIndex("money")));
            bean.setWhole_info(cursor.getString(cursor.getColumnIndex("whole_info")));
            bean.setLove_info(cursor.getString(cursor.getColumnIndex("love_info")));
            bean.setCareer_info(cursor.getString(cursor.getColumnIndex("career_info")));
            bean.setMoney_info(cursor.getString(cursor.getColumnIndex("money_info")));
            bean.setHealth_info(cursor.getString(cursor.getColumnIndex("health_info")));
        }
        cursor.close();
        return bean;
    }

(7) 修改Constant.java文件。在utils包中Constant类中添加名为REQUEST_CONSTELLATION_URL的“星座”界面接口地址:

//星座界面接口
    public static final String REQUEST_CONSTELLATION_URL = "/constellation_data.json";

6. “星座”界面逻辑代码

任务分析:
“星座”界面主要用于展示星座的详细信息,当进入“星座”界面时,首先从服务器中获取信息数据,然后把数据展示到“星座”界面上。当点击右上角的“切换”按钮时,会跳转到“星座选择”界面。

任务实施:
(1)获取界面控件。在ConstellationActivity中创建界面控件的初始化方法init(),获取“星座”界面所要用到的控件。

(2)获取与设置数据。在ConstellationActivity中创建getData()与setData()方法,分别用于获取服务器中的数据与把获取的数据设置到“星座”界面。

(3)回传数据。在ConstellationActivity中重写onActivityResult()方法,接收从星座选择界面获取的星座Id,根据Id从数据库获取对应星座信息并展示到界面上。

ConstellationActivity.java

public class ConstellationActivity extends AppCompatActivity {
    private TextView tv_back, tv_switch;
    private SwipeBackLayout layout;
    private ImageView iv_head, iv_icon;
    private TextView tv_name, tv_date, tv_info;
    private RatingBar rb_whole, rb_love, rb_career, rb_money;
    private TextView tv_whole, tv_love, tv_career, tv_money, tv_health;
    private OkHttpClient okHttpClient;
    public static final int MSG_CONSTELLATION_OK = 1;//获取星座数据
    private MHandler mHandler;
    private Random mRandom;
    private Timer mTimer;
    private HeartLayout mHeartLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        layout = (SwipeBackLayout) LayoutInflater.from(this).inflate(
                R.layout.base, null);
        layout.attachToActivity(this);
        setContentView(R.layout.activity_constellation);
        mHandler = new MHandler();
        okHttpClient = new OkHttpClient();
        getData();
        init();
    }
    private void init() {
        mTimer = new Timer();
        mRandom = new Random();
        tv_back = (TextView) findViewById(R.id.tv_back);
        tv_switch = (TextView) findViewById(R.id.tv_save);
        tv_back.setVisibility(View.VISIBLE);
        tv_switch.setVisibility(View.VISIBLE);
        tv_switch.setText("切换");
        iv_head = (ImageView) findViewById(R.id.iv_head);
        iv_icon = (ImageView) findViewById(R.id.iv_icon);
        tv_name = (TextView) findViewById(R.id.tv_name);
        tv_date = (TextView) findViewById(R.id.tv_date);
        tv_info = (TextView) findViewById(R.id.tv_info);
        rb_whole = (RatingBar) findViewById(R.id.rb_whole);
        rb_love = (RatingBar) findViewById(R.id.rb_love);
        rb_career = (RatingBar) findViewById(R.id.rb_career);
        rb_money = (RatingBar) findViewById(R.id.rb_money);
        tv_whole = (TextView) findViewById(R.id.tv_whole);
        tv_love = (TextView) findViewById(R.id.tv_love);
        tv_career = (TextView) findViewById(R.id.tv_career);
        tv_money = (TextView) findViewById(R.id.tv_money);
        tv_health = (TextView) findViewById(R.id.tv_health);
        tv_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ConstellationActivity.this.finish();
            }
        });
        tv_switch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(ConstellationActivity.this, ChooseConstellationActivity.class);
                startActivityForResult(intent, 1);
            }
        });
        mHeartLayout = (HeartLayout) findViewById(R.id.heart_layout);
        mTimer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                mHeartLayout.post(new Runnable() {
                    @Override
                    public void run() {
                        mHeartLayout.addHeart(randomColor());
                    }
                });
            }
        }, 500, 200);
    }
    private int randomColor() {
        return Color.rgb(mRandom.nextInt(255), mRandom.nextInt(255),
                mRandom.nextInt(255));
    }
    /**
     * 事件捕获
     */
    class MHandler extends Handler {
        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            switch (msg.what) {
                case MSG_CONSTELLATION_OK:
                    if (msg.obj != null) {
                        String result = (String) msg.obj;
                        List<ConstellationBean> list = JsonParse.getInstance().
                                getConstellaList(result);
                        if (list != null) {
                            if (list.size() > 0) {
                                //保存数据到数据库
                                DBUtils.getInstance(ConstellationActivity.this).
                                        saveConstellationInfo(list);
                                ConstellationBean bean = DBUtils.getInstance(
                                        ConstellationActivity.this).getConstellationInfo(1);
                                setData(bean);
                            }
                        }
                    }
                    break;
            }
        }
    }
    private void setData(ConstellationBean bean) {
        tv_name.setText(bean.getName());
        Glide
                .with(ConstellationActivity.this)
                .load(bean.getHead())
                .error(R.mipmap.ic_launcher)
                .into(iv_head);
        Glide
                .with(ConstellationActivity.this)
                .load(bean.getIcon())
                .error(R.mipmap.ic_launcher)
                .into(iv_icon);
        tv_date.setText(bean.getDate());
        tv_info.setText(bean.getInfo());
        rb_whole.setRating(bean.getWhole());
        rb_love.setRating(bean.getLove());
        rb_career.setRating(bean.getCareer());
        rb_money.setRating(bean.getMoney());
        tv_whole.setText(bean.getWhole_info());
        tv_love.setText(bean.getLove_info());
        tv_career.setText(bean.getCareer_info());
        tv_money.setText(bean.getMoney_info());
        tv_health.setText(bean.getHealth_info());
    }
    private void getData() {
        Request request = new Request.Builder().url(Constant.WEB_SITE +
                Constant.REQUEST_CONSTELLATION_URL).build();
        Call call = okHttpClient.newCall(request);
        //开启异步线程访问网络
        call.enqueue(new Callback() {
            @Override
            public void onResponse(Response response) throws IOException {
                String res = response.body().string();
                Message msg = new Message();
                msg.what = MSG_CONSTELLATION_OK;
                msg.obj = res;
                mHandler.sendMessage(msg);
            }
            @Override
            public void onFailure(Request arg0, IOException arg1) {
            }
        });
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mTimer.cancel();
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data != null) {
            int id = data.getIntExtra("id", 0);
            ConstellationBean bean = DBUtils.getInstance(ConstellationActivity.this).
                    getConstellationInfo(id);
            setData(bean);
        }
    }
}

(4)修改清单文件。由于“星座”界面由右滑动会给关闭该界面,因此需要给该界面添加透明主题的样式,在清单文件的ConstellationActivity对应的activity标签中添加如下代码:

       <activity
            android:name=".activity.ConstellationActivity"
            android:theme="@style/AppTheme.TransparentActivity" />

(5)修改“我”界面逻辑代码。由于点击“我”界面上的星座图标是会跳转到“星座”界面,因此需要在MeFragment中的onClick()方法,在该方法的“case R.id.ll_constellation:”语句下方添加如下代码:

Intent constellIntent = new Intent(getActivity(), ConstellationActivity.class);
startActivity(constellIntent);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容