主界面绘制、加载轮播图、减少apk体积( 简易音乐 五)

本文介绍了如何在Android应用中实现主界面的绘制,包括底部导航栏和轮播图功能。使用RadioButton创建底部菜单栏,通过Banner库实现轮播图,并展示了相关布局和实体类的设置。同时,提到了如何处理图片资源以减少APK体积,并修复了使用GsonFormat插件生成实体类后的一个bug。
摘要由CSDN通过智能技术生成

关于

  本篇主要是主界面的绘制、包括底部菜单栏、首页轮播图(把所有东西都放本篇来讲会显得篇幅太长,而且思路不一定会清晰,本着解耦的想法,我会尽量把一些内容分开,以简易音乐文章系列之一形式出现,就比如Android三方框架banner实现轮播图、比如android实现沉浸式状态栏
  上一篇修改登录判断以及数据保存( 简易音乐 四)

  本篇首页的底部菜单栏用的是RadioButton,轮播图用的是第三方banner+viewpager2,关于banner的详细使用可以参考这篇Android三方框架banner实现轮播图

效果图

在这里插入图片描述

底部导航栏菜单资源

  图片链接:提取码:tf7x
在这里插入图片描述  可以看到几乎大部分都是.webp格式图片,如何转换可以参考Android使用.webp替换.jpeg与.png格式图片减少图片大小,好处就是图片大小锐减。

第一步,修改activity_main.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:orientation="vertical"
    android:background="@color/whitesmoke"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/frame_main"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="match_parent">
    </FrameLayout>
    <RadioGroup
        android:id="@+id/rg_tabs"
        android:layout_width="match_parent"
        android:layout_height="54dp"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:padding="5dp">

        <RadioButton
            android:id="@+id/rb_main"
            style="@style/tab_RadioButton_normal"
            android:drawableTop="@drawable/bottom_home_style"
            android:text="@string/home_page"
            />

        <RadioButton
            android:id="@+id/rb_contact"
            style="@style/tab_RadioButton_normal"
            android:drawableTop="@drawable/bottom_me_style"
            android:text="@string/me"
            />

        <RadioButton
            android:id="@+id/rb_me"
            style="@style/tab_RadioButton_normal"
            android:drawableTop="@drawable/bottom_topic_style"
            android:text="@string/cloud"
             />


    </RadioGroup>
</LinearLayout>

  添加radiobutton的图片样式bottom_home_style.xml,其他两个复制修改即可。:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@mipmap/icon_home_select"/>
    <item android:drawable="@mipmap/icon_home"/>
</selector>

  在res/values/styles.xml下添加对应text1的tab_RadioButton_normal主题:

  <style name="tab_RadioButton_normal">
        <item name="android:button">@null</item>
        <item name="android:layout_weight">1</item>
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:gravity">center</item>
        <item name="android:textColor">@drawable/bottom_text_style</item>
        <item name="android:textSize">@dimen/dp_10</item>
        <item name="android:drawablePadding">@dimen/dp_3</item>
    </style>

  其中text颜色选取样式bottom_text_style.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/colorAccent"/>
    <item android:color="@color/textGray"/>
    <!--<color name="textGray">#707070</color>-->
</selector>

新增Fragment_main.java碎片

  修改res/values/strings.xml文件:

 <string name="app_name">简易音乐</string>

    <!-- TODO: Remove or change this placeholder text -->
    <string name="hello_blank_fragment">Hello blank fragment</string>
    <string name="back">&lt;</string>
    <string name="home_page">发现</string>
    <string name="me">我的</string>
    <string name="cloud">云村</string>
    <string name="day_recommend">每日推荐</string>
    <string name="playlist">歌单</string>
    <string name="rank">排行榜</string>
    <string name="radio">电台</string>
    <string name="live">直播</string>
    <string name="fm">私人FM</string>
    <string name="recommend_playlist">懂你的精选歌单</string>
    <string name="playlist_playground">查看更多</string>
    <string name="login_phone_number">手机号登录</string>
    <string name="press_exit_again">再按一次退出应用</string>
    <string name="input_phone">请输入手机号</string>
    <string name="input_pwd">请输入密码</string>
    <string name="login">立即登录</string>
    <string name="login_title">登 录</string>
    <string name="please_input_phonenumber">请输入手机号码</string>
    <string name="please_input_phonenumber_correctly">请输入有效的电话号码</string>
    <string name="please_input_pwd">请输入密码</string>
    <string name="pwd_must_less_than_30">请输入小于30位的密码</string>
    <string name="enter_correct_password">请正确输入密码</string>
    <string name="search">搜索</string>
    <string name="search_history">历史</string>
    <string name="hot_search">热搜榜</string>

  修改fragment_main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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="#ffffff"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >


    <RelativeLayout
        android:id="@+id/layout_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/content_main" />

        <FrameLayout
            android:id="@+id/fl_banner"
            android:layout_below="@+id/content_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/dp_95"
                android:background="@color/colorPrimary" />

            <com.youth.banner.Banner
                android:id="@+id/banner"
                android:background="@drawable/banner_background_style"
                android:layout_width="match_parent"
                android:layout_height="@dimen/dp_160"
                android:layout_marginStart="@dimen/dp_15"
                android:layout_marginTop="@dimen/dp_15"
                android:layout_marginEnd="@dimen/dp_15" />

        </FrameLayout>

        <LinearLayout
            android:id="@+id/ll_function"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_74"
            android:layout_below="@id/fl_banner"
            android:layout_marginTop="@dimen/dp_15"
            android:gravity="center"
            android:orientation="horizontal"
            android:paddingLeft="@dimen/dp_20"
            android:paddingRight="@dimen/dp_20">

            <RelativeLayout
                android:id="@+id/rl_day_rec"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <RelativeLayout
                    android:id="@+id/test"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    >
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:id="@+id/text_fm"
                        android:layout_centerHorizontal="true"
                        android:text="9"
                        android:textColor="#333333"
                        android:textSize="@dimen/sp_12" />
                    <ImageView
                        android:id="@+id/iv_day_recommend"
                        android:layout_width="@dimen/dp_50"
                        android:layout_height="@dimen/dp_50"

                        android:background="@mipmap/ic_daily_recommend">

                    </ImageView>
                </RelativeLayout>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/test"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="@dimen/dp_4"
                    android:text="@string/day_recommend"
                    android:textColor="#333333"
                    android:textSize="@dimen/sp_12" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/rl_mine_fm"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <ImageView
                    android:id="@+id/iv_mine_fm"
                    android:layout_width="@dimen/dp_50"
                    android:layout_height="@dimen/dp_50"
                    android:layout_centerHorizontal="true"
                    android:background="@mipmap/ic_mine_fm" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/iv_mine_fm"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="@dimen/dp_4"
                    android:text="@string/fm"
                    android:textColor="#333333"
                    android:textSize="@dimen/sp_12" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/rl_play_list"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <ImageView
                    android:id="@+id/iv_playlist"
                    android:layout_width="@dimen/dp_50"
                    android:layout_height="@dimen/dp_50"
                    android:layout_centerHorizontal="true"
                    android:background="@mipmap/ic_playlist" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/iv_playlist"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="@dimen/dp_4"
                    android:text="@string/playlist"
                    android:textColor="#333333"
                    android:textSize="@dimen/sp_12" />
            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/rl_rank"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <ImageView
                    android:id="@+id/iv_rank"
                    android:layout_width="@dimen/dp_50"
                    android:layout_height="@dimen/dp_50"
                    android:layout_centerHorizontal="true"
                    android:background="@mipmap/ic_rank" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/iv_rank"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="@dimen/dp_4"
                    android:text="@string/rank"
                    android:textColor="#333333"
                    android:textSize="@dimen/sp_12" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/rl_live"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <ImageView
                    android:id="@+id/iv_live"
                    android:layout_width="@dimen/dp_50"
                    android:layout_height="@dimen/dp_50"
                    android:layout_centerHorizontal="true"
                    android:background="@mipmap/ic_live" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/iv_live"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="@dimen/dp_4"
                    android:text="@string/live"
                    android:textColor="#333333"
                    android:textSize="@dimen/sp_12" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/rl_radio"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <ImageView
                    android:id="@+id/iv_radio"
                    android:layout_width="@dimen/dp_50"
                    android:layout_height="@dimen/dp_50"
                    android:layout_centerHorizontal="true"
                    android:background="@mipmap/ic_radio" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/iv_radio"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="@dimen/dp_4"
                    android:text="@string/radio"
                    android:textColor="#333333"
                    android:textSize="@dimen/sp_12" />
            </RelativeLayout>


        </LinearLayout>
        <TextView
            android:id="@+id/tv_gap"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_below="@id/ll_function"
            android:layout_marginTop="@dimen/dp_12"
            android:background="#f0f0f0" />
        <RelativeLayout
            android:id="@+id/rl_show_recommend_playlist"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_45"
            android:layout_below="@id/tv_gap"
            android:layout_marginTop="@dimen/dp_10">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:layout_marginStart="@dimen/dp_25"
                android:scaleX="1.1"
                android:scaleY="1.1"
                android:text="@string/recommend_playlist"
                android:textColor="#333333"
                android:textSize="@dimen/sp_18"
                android:typeface="sans" />

            <TextView
                android:id="@+id/tv_playlist_playground"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:layout_marginEnd="@dimen/dp_15"
                android:background="@drawable/bg_playlist_playground"
                android:paddingLeft="@dimen/dp_15"
                android:paddingTop="@dimen/dp_8"
                android:paddingRight="@dimen/dp_15"
                android:paddingBottom="@dimen/dp_8"
                android:text="@string/playlist_playground"
                android:textColor="#353636"
                android:textSize="@dimen/sp_11"
                android:layout_alignParentRight="true"
                android:layout_marginRight="@dimen/dp_15" />
        </RelativeLayout>

       

        <LinearLayout
            android:id="@+id/recommend_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">


        </LinearLayout>



    </RelativeLayout>

</FrameLayout>

  其中查看更多的text的样式bg_playlist_playground.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="@dimen/dp_20" />
    <stroke
        android:width="@dimen/dp_1"
        android:color="#e6e6e6" />

</shape>

添加实体类与轮播图适配器

  实体类通过GsonFormat插件生成的:

package com.tobey.jianyimusic.home.bean;

import org.litepal.annotation.Column;
import org.litepal.crud.LitePalSupport;

import java.io.Serializable;
import java.util.List;

/**
 * 首页轮播图bean
 * Created By Tobey on 2021/6/10
 */
public class banner_bean {


    private int code;
    private List<BannersBean> banners;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public List<BannersBean> getBanners() {
        return banners;
    }

    public void setBanners(List<BannersBean> banners) {
        this.banners = banners;
    }

    public static class BannersBean {
        /**
         * pic : http://p1.music.126.net/wtPhw_8mf71WE8Skz7laYA==/109951165299445032.jpg
         * targetId : 0
         * adid : null
         * targetType : 3000
         * titleColor : blue
         * typeTitle : 独家策划
         * url : https://music.163.com/m/at/5f4eff178c81c03a8f906e90
         * adurlV2 : null
         * exclusive : false
         * monitorImpress : null
         * monitorClick : null
         * monitorType : null
         * monitorImpressList : []
         * monitorClickList : []
         * monitorBlackList : null
         * extMonitor : null
         * extMonitorInfo : null
         * adSource : null
         * adLocation : null
         * encodeId : 0
         * program : null
         * event : null
         * video : null
         * dynamicVideoData : null
         * song : null
         * bannerId : 1599390761322724
         * alg : null
         * scm : 1.music-homepage.homepage_banner_force.banner.1010304.968363584.null
         * requestId :
         * showAdTag : true
         * pid : null
         * showContext : null
         * adDispatchJson : null
         */

        private String pic;
        private long targetId;
        private Object adid;
        private int targetType;
        private String titleColor;
        private String typeTitle;
        private String url;
        private Object adurlV2;
        private boolean exclusive;
        private Object monitorImpress;
        private Object monitorClick;
        private Object monitorType;
        private Object monitorBlackList;
        private Object extMonitor;
        private Object extMonitorInfo;
        private Object adSource;
        private Object adLocation;
        private String encodeId;
        private Object program;
        private Object event;
        private Object video;
        private Object dynamicVideoData;
        private Object song;
        private String bannerId;
        private Object alg;
        private String scm;
        private String requestId;
        private boolean showAdTag;
        private Object pid;
        private Object showContext;
        private Object adDispatchJson;
        private List<?> monitorImpressList;
        private List<?> monitorClickList;

        public String getPic() {
            return pic;
        }

        public void setPic(String pic) {
            this.pic = pic;
        }

        public long getTargetId() {
            return targetId;
        }

        public void setTargetId(long targetId) {
            this.targetId = targetId;
        }

        public Object getAdid() {
            return adid;
        }

        public void setAdid(Object adid) {
            this.adid = adid;
        }

        public int getTargetType() {
            return targetType;
        }

        public void setTargetType(int targetType) {
            this.targetType = targetType;
        }

        public String getTitleColor() {
            return titleColor;
        }

        public void setTitleColor(String titleColor) {
            this.titleColor = titleColor;
        }

        public String getTypeTitle() {
            return typeTitle;
        }

        public void setTypeTitle(String typeTitle) {
            this.typeTitle = typeTitle;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public Object getAdurlV2() {
            return adurlV2;
        }

        public void setAdurlV2(Object adurlV2) {
            this.adurlV2 = adurlV2;
        }

        public boolean isExclusive() {
            return exclusive;
        }

        public void setExclusive(boolean exclusive) {
            this.exclusive = exclusive;
        }

        public Object getMonitorImpress() {
            return monitorImpress;
        }

        public void setMonitorImpress(Object monitorImpress) {
            this.monitorImpress = monitorImpress;
        }

        public Object getMonitorClick() {
            return monitorClick;
        }

        public void setMonitorClick(Object monitorClick) {
            this.monitorClick = monitorClick;
        }

        public Object getMonitorType() {
            return monitorType;
        }

        public void setMonitorType(Object monitorType) {
            this.monitorType = monitorType;
        }

        public Object getMonitorBlackList() {
            return monitorBlackList;
        }

        public void setMonitorBlackList(Object monitorBlackList) {
            this.monitorBlackList = monitorBlackList;
        }

        public Object getExtMonitor() {
            return extMonitor;
        }

        public void setExtMonitor(Object extMonitor) {
            this.extMonitor = extMonitor;
        }

        public Object getExtMonitorInfo() {
            return extMonitorInfo;
        }

        public void setExtMonitorInfo(Object extMonitorInfo) {
            this.extMonitorInfo = extMonitorInfo;
        }

        public Object getAdSource() {
            return adSource;
        }

        public void setAdSource(Object adSource) {
            this.adSource = adSource;
        }

        public Object getAdLocation() {
            return adLocation;
        }

        public void setAdLocation(Object adLocation) {
            this.adLocation = adLocation;
        }

        public String getEncodeId() {
            return encodeId;
        }

        public void setEncodeId(String encodeId) {
            this.encodeId = encodeId;
        }

        public Object getProgram() {
            return program;
        }

        public void setProgram(Object program) {
            this.program = program;
        }

        public Object getEvent() {
            return event;
        }

        public void setEvent(Object event) {
            this.event = event;
        }

        public Object getVideo() {
            return video;
        }

        public void setVideo(Object video) {
            this.video = video;
        }

        public Object getDynamicVideoData() {
            return dynamicVideoData;
        }

        public void setDynamicVideoData(Object dynamicVideoData) {
            this.dynamicVideoData = dynamicVideoData;
        }

        public Object getSong() {
            return song;
        }

        public void setSong(Object song) {
            this.song = song;
        }

        public String getBannerId() {
            return bannerId;
        }

        public void setBannerId(String bannerId) {
            this.bannerId = bannerId;
        }

        public Object getAlg() {
            return alg;
        }

        public void setAlg(Object alg) {
            this.alg = alg;
        }

        public String getScm() {
            return scm;
        }

        public void setScm(String scm) {
            this.scm = scm;
        }

        public String getRequestId() {
            return requestId;
        }

        public void setRequestId(String requestId) {
            this.requestId = requestId;
        }

        public boolean isShowAdTag() {
            return showAdTag;
        }

        public void setShowAdTag(boolean showAdTag) {
            this.showAdTag = showAdTag;
        }

        public Object getPid() {
            return pid;
        }

        public void setPid(Object pid) {
            this.pid = pid;
        }

        public Object getShowContext() {
            return showContext;
        }

        public void setShowContext(Object showContext) {
            this.showContext = showContext;
        }

        public Object getAdDispatchJson() {
            return adDispatchJson;
        }

        public void setAdDispatchJson(Object adDispatchJson) {
            this.adDispatchJson = adDispatchJson;
        }

        public List<?> getMonitorImpressList() {
            return monitorImpressList;
        }

        public void setMonitorImpressList(List<?> monitorImpressList) {
            this.monitorImpressList = monitorImpressList;
        }

        public List<?> getMonitorClickList() {
            return monitorClickList;
        }

        public void setMonitorClickList(List<?> monitorClickList) {
            this.monitorClickList = monitorClickList;
        }
    }
}

  轮播图使用的第三方,在项目build下添加(这里不做一些使用解释,其他用法可参考Android三方框架banner实现轮播图):

 //banner
    implementation 'io.github.youth5201314:banner:2.2.2'
    implementation "androidx.viewpager2:viewpager2:1.0.0"

  在工程build下添加仓库maven:

 repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
        //主要这行
        maven { url "https://s01.oss.sonatype.org/content/groups/public" }
    }

  编写TitleHolder继承RecyclerView.ViewHolder

public class TitleHolder extends RecyclerView.ViewHolder {
    public ImageView imageView;
    public TextView textView;

    public TitleHolder(@NonNull View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.bannerImage);
        textView = itemView.findViewById(R.id.bannerTitle);
    }
}

新增banner图片+标题的item布局文件banner_title_image.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">

    <ImageView
        android:id="@+id/bannerImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop" />

    <TextView
        android:id="@+id/bannerTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@null"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:gravity="center_vertical"
        android:paddingRight="@dimen/dp_5"
        android:paddingBottom="@dimen/dp_1"
        android:singleLine="true"
        android:textColor="#ffffff"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"/>
</RelativeLayout>

  编写ImageTitleAdapter继承BannerAdapter(三方banner里面的):

/**
 * banner轮播图适配器 图片+标题
 */

public class ImageTitleAdapter extends BannerAdapter<banner_bean.BannersBean,TitleHolder> {
    public Context mContext;
    public ImageTitleAdapter(List<banner_bean.BannersBean> datas, Fragment_main fragment_main) {
        super(datas);
        mContext = fragment_main.getActivity();
    }




    @Override
    public TitleHolder onCreateHolder(ViewGroup parent, int viewType) {
       return new TitleHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.banner_title_image,parent,false));

    }

    @Override
    public void onBindView(TitleHolder holder, banner_bean.BannersBean data, int position, int size) {
        Glide.with(holder.imageView)
                .load(data.getPic())
                .thumbnail(Glide.with(holder.itemView).load(R.drawable.loading))
                .apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))
                .into(holder.imageView);
        holder.textView.setText(data.getTypeTitle());
        holder.textView.setTextColor(data.getTitleColor().equals("red")?mContext.getResources().getColor(R.color.red):mContext.getResources().getColor(R.color.blue));
        /* <color name="blue">#00BFFF</color>
         <color name="red">#FF0000</color>*/
    }


}

新增轮播图功能

  修改ApiService.java类,添加轮播图请求接口方法:

 /**
     * 轮播图*/
    @GET("banner")
    Observable<banner_bean> getBanner(@Query("type") int type); 

  修改Fragment_main.java代码

public class Fragment_main extends BaseFragment {

    @BindView(R.id.banner)
    Banner banner;
    @BindView(R.id.text_fm)
    TextView textView_fm;4
    List<banner_bean.BannersBean> list_banner ;
    private static int potsition = 0
    
    
    @Override
    protected int getLayout() {
        return R.layout.fragment_main;
    }

    @Override
    protected void initView(View view) {
        String date = Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "";
        textView_fm.setText(date);
        initData();
    }

    private void initData() {
        //请求轮播图
        RetrofitUtils.getmApi().getBanner(1)
                .compose(RXHelper.observableIO2Main(getContext()))
                .subscribe(new StaticMethodUtils.OnCallback<banner_bean>(){

                    @Override
                    public void onNext(banner_bean banner_bean) {
                       if (banner_bean.getCode() == 200){
                                   updateBanner(banner_bean.getBanners());
                       }
                    }

                    @Override
                    public void onError(Throwable e) {
                        super.onError(e);
                    }
                });
   
    }

    private void updateBanner(List<banner_bean.BannersBean> banners) {
        if (banners !=null && banners.size() >0){
            int i = banners.size();
            list_banner = new ArrayList<>();
            for (int j=0;j<i;j++){
                banner_bean.BannersBean bannerBean = new banner_bean.BannersBean();
                               bannerBean.setUrl(banners.get(j).getUrl());
                               bannerBean.setPic(banners.get(j).getPic());
                               bannerBean.setTypeTitle(banners.get(j).getTypeTitle());
                               bannerBean.setTitleColor(banners.get(j).getTitleColor());
                            //   bannerBean.setSong(banners.get(j).getSong());
                               list_banner.add(bannerBean);
            }
            banner.setIndicator(new RectangleIndicator(getActivity()))
           .setIndicatorHeight(5)
            .setIndicatorWidth(6,6)
            .setIndicatorGravity(IndicatorConfig.Direction.CENTER)
            .setAdapter(new ImageTitleAdapter(list_banner,this))
                    .addBannerLifecycleObserver(getActivity())//添加生命周期观察者
                    .setIntercept(false)
                    .setBannerRound(10f);
        }
    }

    @Override
    protected void setListener() {

    }

    @Override
    public void onPause() {
        super.onPause();
        potsition = banner.getViewPager2().getCurrentItem();
    }

    @Override
    public void onResume() {
        super.onResume();
        if (potsition != 0&&banner !=null){
            banner.setStartPosition(potsition);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (list_banner_sq !=null){
            list_banner_sq.clear();
            list_banner_sq = null;
        }
    }

}

修改MainActivity.java代码

@Route(path = Config.ROUTE_HOME)
public class MainActivity extends BaseActivity {

    @BindView(R.id.frame_main)
    FrameLayout frameLayout_main;
    @BindView(R.id.rb_main)
    RadioButton rgMain;
    @BindView(R.id.rg_tabs)
    RadioGroup rgTabs;

    private Login_Bean loginBean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected BasePresenter onCreatePresenter() {
        return null;
    }

    @Override
    protected void initData() {
        
    }

    @Override
    protected void initModule() {
        rgTabs.check(R.id.rb_main);
        changeFragment(new Fragment_main());
        rgTabs.setOnCheckedChangeListener(mOnCheckedChangeListener);

    }


    private RadioGroup.OnCheckedChangeListener mOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId){
                case R.id.rb_main:
                  changeFragment(new Fragment_main());
                    break;
                case R.id.rb_contact:

                    break;
                case R.id.rb_me:
                    changeFragment(new Fragment_center());
                    break;
            }


        }
    };

    private void changeFragment(BaseFragment fragment) {
        //开启事务
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        //切换布局
        transaction.replace(R.id.frame_main,fragment);
        transaction.commit();
    }


}

发现一个bug

  详情参考文章 解决使用GsonFromat插件生成实体类后造成的一个bug
到此本篇内容介绍完毕,有问题欢迎批评指正,觉得不错的也请点个赞奥下一篇新增我的推荐歌单、通过ViewPager2+RadioGroup重构主界面( 简易音乐 六)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪の星空朝酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值