Android项目(完整版+免费版)

Android项目–关于星座相关的app

第一部分–界面效果图

  • 页面一:(点击页面任意一个星座图标会显示相应的数据)
  • 页面二:(可以更换男生或女生的星座,点击开始配对分析,能跳转相应的页面,并显示相应的数据分析)
  • 页面三:(点击任意一个图标,跳转到相应的页面,展示这一年的运势数据)
  • 页面四:(点击头像,能更换相应的星座,下一次登录,仍然会保存)

第二部分–图片素材

以下是百度网盘的链接:
链接:https://pan.baidu.com/s/1vbtOJNS-I2Lm1JXXxumZSg
提取码:1111

第三部分–部分代码

- XingZuoWeb(我的项目名称)—>app—>src—>main–>java–>com.example.xingzuoweb(自己创建的包名)–>MainActivity

package com.example.xingzuoweb;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.RadioGroup;
import com.example.xingzuoweb.bean.StarBean;
import com.example.xingzuoweb.luckfrag.LuckFragment;
import com.example.xingzuoweb.mefrag.MeFragment;
import com.example.xingzuoweb.parnterfrag.PartnerFragment;
import com.example.xingzuoweb.starfrag.StarFragment;
import com.example.xingzuoweb.utils.AssetsUtils;
import com.google.gson.Gson;
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{
   RadioGroup mainRg;
   //声明四个按钮对应的Fragment对象
    Fragment starFrag,luckFrag,partnerFrag,meFrag;
    private FragmentManager manager;
    private FragmentTransaction fragmentTransaction;
    private FragmentTransaction transaction;
    private FragmentTransaction fragmentTransaction1;
    private Object FragmentTransaction;
    private String jsonFromAssets;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mainRg = findViewById(R.id.main_rg);
        //设置监听器点击了哪个单选按钮
        mainRg.setOnCheckedChangeListener(this);
        //加载星座的数据
        StarBean infoBean = loadData();
        Bundle bundle = new Bundle();
        bundle.putSerializable("info",infoBean);
        //创建碎片对象
        starFrag = new StarFragment();
        starFrag.setArguments(bundle);
        luckFrag = new LuckFragment();
        luckFrag.setArguments(bundle);
        partnerFrag = new PartnerFragment();
        partnerFrag.setArguments(bundle);
        meFrag = new MeFragment();
        meFrag.setArguments(bundle);
        //将四个Fragment进行动态加载,一起加载到布局当中。
        addFragmentPage();
    }
    //读取assets下的文件
    private StarBean loadData() {
        String json = AssetsUtils.getJsonFromAssets(this, "xzcontent/xzcontent.json");
        Gson gson = new Gson();
        StarBean infoBean = gson.fromJson(json, StarBean.class);
        AssetsUtils.saveBitmapFromAssets(this,infoBean);
        return infoBean;
    }
    //将主页当中的碎片一起加载进入布局,有用的显示,暂时无用的隐藏。
    private void addFragmentPage() {
        //1.创建碎片管理者对象
        manager = getSupportFragmentManager();
        //2.创建碎片处理事务的对象
        FragmentTransaction transaction = manager.beginTransaction();
        //3.将四个Fragment统一的添加到布局当中
        transaction.add(R.id.main_layout_center,starFrag);
        transaction.add(R.id.main_layout_center,partnerFrag);
        transaction.add(R.id.main_layout_center,luckFrag);
        transaction.add(R.id.main_layout_center,meFrag);
        //4.隐藏后面的三个
        transaction.hide(partnerFrag);
        transaction.hide(luckFrag);
        transaction.hide(meFrag);
        //5.提交碎片改变后的事务
        transaction.commit();
    }
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        FragmentTransaction transaction  = manager.beginTransaction();
        switch (checkedId){
            case R.id.main_rb_star:
                transaction.hide(partnerFrag);
                transaction.hide(luckFrag);
                transaction.hide(meFrag);
                transaction.show(starFrag);
                break;
            case R.id.main_rb_parnter:
                transaction.hide(starFrag);
                transaction.hide(luckFrag);
                transaction.hide(meFrag);
                transaction.show(partnerFrag);
                break;
            case R.id.main_rb_luck:
                transaction.hide(starFrag);
                transaction.hide(partnerFrag);
                transaction.hide(meFrag);
                transaction.show(luckFrag);
                break;
            case R.id.main_rb_me:
                transaction.hide(starFrag);
                transaction.hide(luckFrag);
                transaction.hide(partnerFrag);
                transaction.show(meFrag);
                break;
        }
        transaction.commit();
    }
}
  • com.example.xingzuoweb —> bean(自己创建的包)—> StarBean
package com.example.xingzuoweb.bean;

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

public class StarBean implements Serializable {

    private List<StarinfoBean> starinfo;

    public List<StarinfoBean> getStarinfo() {
        return starinfo;
    }

    public void setStarinfo(List<StarinfoBean> starinfo) {
        this.starinfo = starinfo;
    }

    public static class StarinfoBean implements  Serializable{
        /**
         * logoname : baiyang
         * name : 白羊座
         * date : 3月21日-4月19日
         * td : 热情活力
         * gw : 第一宫
         * yy : 阳性
         * tz : 控制
         * zg : 火星
         * ys : 红色
         * zb : 红宝石
         * hm : 5
         * js : 铁
         * info : 白羊座有一种让人看见就觉得开心的感觉,因为总是看起来都是那么地热情、阳光、乐观、坚强,对朋友也慷概大方,性格直来直往,就是有点小脾气。白羊男有大男人主义的性格,而白羊女就是女汉子的形象。
         */

        private String logoname;
        private String name;
        private String date;
        private String td;
        private String gw;
        private String yy;
        private String tz;
        private String zg;
        private String ys;
        private String zb;
        private String hm;
        private String js;
        private String info;

        public String getLogoname() {
            return logoname;
        }

        public void setLogoname(String logoname) {
            this.logoname = logoname;
        }

        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 getTd() {
            return td;
        }

        public void setTd(String td) {
            this.td = td;
        }

        public String getGw() {
            return gw;
        }

        public void setGw(String gw) {
            this.gw = gw;
        }

        public String getYy() {
            return yy;
        }

        public void setYy(String yy) {
            this.yy = yy;
        }

        public String getTz() {
            return tz;
        }

        public void setTz(String tz) {
            this.tz = tz;
        }

        public String getZg() {
            return zg;
        }

        public void setZg(String zg) {
            this.zg = zg;
        }

        public String getYs() {
            return ys;
        }

        public void setYs(String ys) {
            this.ys = ys;
        }

        public String getZb() {
            return zb;
        }

        public void setZb(String zb) {
            this.zb = zb;
        }

        public String getHm() {
            return hm;
        }

        public void setHm(String hm) {
            this.hm = hm;
        }

        public String getJs() {
            return js;
        }

        public void setJs(String js) {
            this.js = js;
        }

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }
    }
}

  • com.example.xingzuoweb —> home --> GuideActivity
package com.example.xingzuoweb.home;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.example.xingzuoweb.MainActivity;
import com.example.xingzuoweb.R;

import java.util.ArrayList;
import java.util.List;

public class GuideActivity extends AppCompatActivity {
    ViewPager guideVp;
    List<ImageView>mDatas;
    //存放三张图片的地址
    int resIds[] = {R.mipmap.loading1,R.mipmap.loading2,R.mipmap.loading3};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);
        guideVp = findViewById(R.id.guide_vp);
        mDatas = new ArrayList<>();
        initPager();
        //为第三个图片设置监听事件
        setListener();
    }

    private void setListener() {
        int size = mDatas.size();
        ImageView view = mDatas.get(size-1);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(GuideActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }

    private void initPager() {
        for (int i= 0;i<resIds.length;i++){
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(resIds[i]);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            imageView.setLayoutParams(lp);
            mDatas.add(imageView);
        }
        GuideAdapter adapter = new GuideAdapter(mDatas);
        //设置适配器
        guideVp.setAdapter(adapter);
    }
}
  • com.example.xingzuoweb —> home --> GuideAdapter
package com.example.xingzuoweb.home;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

import java.util.List;

public class GuideAdapter extends PagerAdapter {
    List<ImageView>mDatas;

    public GuideAdapter(List<ImageView> mDatas) {
        this.mDatas = mDatas;
    }

    @Override
    public int getCount() {
        return mDatas.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view==object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = mDatas.get(position);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        ImageView imageView = mDatas.get(position);
        container.removeView(imageView);
    }
}

- com.example.xingzuoweb —> home —>WelcomeActivity

package com.example.xingzuoweb.home;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

import com.example.xingzuoweb.MainActivity;
import com.example.xingzuoweb.R;
public class WelcomeActivity extends AppCompatActivity {
    TextView tv;
    int count = 3;
    Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
           if (msg.what==1){
               count--;
               if (count==0){
                   //判断是否是第一次进入应用,如果是第一次进入此应用,跳转到引导页面
                   boolean isFirst = pref.getBoolean("isFirst",true);
                   Intent intent = new Intent();
                   if (isFirst){
                       intent.setClass(WelcomeActivity.this,GuideActivity.class);
                       SharedPreferences.Editor editor = pref.edit();
                       editor.putBoolean("isFirst",false);
                       editor.commit();
                   }else {
                       intent.setClass(WelcomeActivity.this,MainActivity.class);
                   }
                   startActivity(intent);
                   finish();
               }else {
                   tv.setText(String.valueOf(count));
                   handler.sendEmptyMessageDelayed(1,500);
               }
           }

        }
    };
    private SharedPreferences pref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        tv = findViewById(R.id.welcome_tv);
        pref = getSharedPreferences("first_pref", MODE_PRIVATE);
        handler.sendEmptyMessageDelayed(1,500);
    }
}

第四部分–打包后的apk

以下是百度网盘的链接:
点击链接即可下载:https://pan.baidu.com/s/1u0iUk5glF11BRy-bYHub6g
提取码:1111

小伙伴们~ 由于代码量很大,需要完整的代码可以点击链接:XingZuoWeb.zip 进行下载哦~

留言:如果对你有帮助,给博主点个免费的赞吧 ~ 创作不易,感谢支持!
在这里插入图片描述

  • 28
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 39
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李宸净

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

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

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

打赏作者

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

抵扣说明:

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

余额充值