文章目录

  • 场景
  • 内容:
  • 效果
  • 参考

场景

提示:基于期末作业开发+(自增轮播图)

自评:效果蛮丑的,功能都在,仅供参考!


内容:

一,引导页
1,设计引导页LogoActivity,添加引导页所需图片和引导圆点设计
//引导页面至少三张图片

public class LogoActivity extends AppCompatActivity {private List<ImageView> image_points;private LogoAdapter logoAdapter;private List<Integer> imageIds;private ViewPager vp_logo;private boolean isLastPage;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//       @SuppressLint("ResourceType") View login = findViewById(R.layout.activity_login);setContentView(R.layout.activity_logo);vp_logo = findViewById(R.id.vp_logo);imageIds = new ArrayList<>();imageIds.add(R.drawable.logo1);imageIds.add(R.drawable.logo2);imageIds.add(R.drawable.logo3);imageIds.add(R.drawable.logo4);logoAdapter = new LogoAdapter(imageIds, this);vp_logo.setAdapter(logoAdapter);image_points = new ArrayList<>();LinearLayout ll_points = findViewById(R.id.ll_points);for (int i = 0; i < imageIds.size(); i++) {ImageView imageView = new ImageView(this);imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));imageView.setImageResource(R.drawable.point_blue);final int finalI = i;imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {vp_logo.setCurrentItem(finalI);}});image_points.add(imageView);ll_points.addView(imageView);}private void setPoint(int position) {for (int i = 0; i < image_points.size(); i++) {if (i == position) {image_points.get(i).setImageResource(R.drawable.point_blue);} else {image_points.get(i).setImageResource(R.drawable.point_pink);}}}
}

2,同时设计引导页面图片适配容器,item_logo布局

public class LogoAdapter extends PagerAdapter {List<Integer> imageIds ;Context ctx;public LogoAdapter(List<Integer> imageIds, Context ctx){this.imageIds = imageIds;this.ctx = ctx;}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position){ImageView imageView = (ImageView) LayoutInflater.from(ctx).inflate(R.layout.item_logo,container, false);imageView.setImageResource(imageIds.get(position));container.addView(imageView);return imageView;}@Overridepublic void destroyItem(@NonNull ViewGroup container,int position,@NonNull Object object){container.removeView((View) object);}@Overridepublic int getCount() {return imageIds.size();}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view == object;}
}
<?xml version="1.0" encoding="utf-8"?>
<ImageViewxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"></ImageView>
3,在LogoActivity设计结束跳转登入页面vp_logo.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {setPoint(position);}@Overridepublic void onPageSelected(int position) {setPoint(position);isLastPage = position == imageIds.size() - 1;}@Overridepublic void onPageScrollStateChanged(int state) {if (isLastPage) {goLoginActivity();}}});setPoint(0);
}public void goLoginActivity() {startActivity(new Intent(this, LoginActivity.class));finish();
}

效果图:

二,登入界面
1,生成登入,LoginDataSource修改登入信息和样式

public class LoginDataSource {public Result<LoggedInUser> login(String username, String password) {try {// TODO: handle loggedInUser authenticationif(username.equals("郭淑瑛")&&password.equals("123")){LoggedInUser fakeUser =new LoggedInUser(java.util.UUID.randomUUID().toString(),username+"Doe");return new Result.Success<>(fakeUser);}else {return new Result.Error(new IOException("账号密码错误!"));}} catch (Exception e) {return new Result.Error(new IOException("Error logging in", e));}}public void logout() {// TODO: revoke authentication}
}

2,在LoginActivity加登入成功跳转事件,跳转到主页面

startActivity(new Intent(LoginActivity.this, MainActivity.class));

效果图:

三,主页面显示新闻列表
1,item_news_normal.xml规范列表样式部署item_news_tv_title,item_news_tv_time,item_news_tv_img

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:background="@color/palegoldenrod"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:id="@+id/item_news_linearlayout"android:layout_width="fill_parent"android:layout_height="@dimen/item_news_height"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:layout_marginTop="10dp"android:orientation="horizontal"android:visibility="visible"><TextViewandroid:id="@+id/item_news_tv_title"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center_vertical"android:layout_marginLeft="8dp"android:layout_marginRight="8dp"android:layout_weight="1"android:ellipsize="end"android:maxLines="4"android:text="@string/default_text"android:textColor="@color/black"/><ImageViewandroid:id="@+id/item_news_tv_img"android:layout_width="fill_parent"android:layout_height="90dp"android:layout_weight="2"android:scaleType="fitXY"android:src="@mipmap/ic_launcher_round"/></LinearLayout><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="25dp"android:layout_marginBottom="10dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"><TextViewandroid:id="@+id/item_news_tv_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:text="10 minutes ago"android:textColor="@color/darkgray"android:textSize="12sp"/><TextViewandroid:id="@+id/item_news_tv_arrow"android:layout_width="3dp"android:layout_height="20dp"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:background="@color/darkgray" /><TextViewandroid:id="@+id/item_news_tv_source"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginBottom="10dp"android:layout_marginRight="10dp"android:layout_toLeftOf="@id/item_news_tv_arrow"android:text="@string/source_news_text"android:textColor="@color/darkgray"android:textSize="12sp"/></RelativeLayout>
</LinearLayout>

2,创建新闻容器NewsBean,和NewsHttp get json数据和解析所需数据标题等

private List<NewsBean> jsonNews(String json) {List<NewsBean> newsBeans = null;try {JSONObject jsonObject = new JSONObject(json);JSONArray jsonArray = jsonObject.getJSONArray("T1348647853363");newsBeans = new ArrayList<>();for (int i = 0; i < jsonArray.length(); i++) {JSONObject object = jsonArray.getJSONObject(i);String title = object.getString("title");String imgSrc = object.getString("imgsrc");String time = object.getString("mtime");NewsBean newsBean = new NewsBean(title, imgSrc, time);newsBeans.add(newsBean);}} catch (JSONException e) {e.printStackTrace();}return newsBeans;

3,在MainActivity调用使用

public View getView(int i, View view, ViewGroup viewGroup) {if (view == null) {view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_news_normal, viewGroup, false);}TextView tv_title = view.findViewById(R.id.item_news_tv_title);TextView tv_time = view.findViewById(R.id.item_news_tv_time);ImageView iv_img = view.findViewById(R.id.item_news_tv_img);tv_title.setText(getItem(i).getTitle());tv_time.setText(getItem(i).getTime());Glide.with(MainActivity.this).load(getItem(i).imgSrc).into(iv_img);return view;
}public void add(List<NewsBean> newsBeans) {MainActivity.this.newsBeans.clear();MainActivity.this.newsBeans.addAll(newsBeans);notifyDataSetChanged();
}

效果图:

四,轮播图
查看参考,是直接采用的方法


效果

不好意思,不会做动图
完整代码链接

完整讲解加代码和效果视频:查看资源


参考

(87条消息) Android开发-Android应用中启动时引导页的实现__彼岸雨敲窗_的博客-CSDN博客_android 引导页实现

(117条消息) Android Studio 出现“Cannot resolve symbol” 解决办法_极客神殿-CSDN博客_cannot resolve symbol

(144条消息) Android使用banner实现自动手动轮播图_李小白的博客的博客-CSDN博客_android banner自动轮播

Android(仿QQ登入+网易新闻)相关推荐

  1. 仿QQ登入界面增加反应

    上次,咋们做了一个仿QQ登入界面,现在咋们的目标就是让这个界面上的组件有所反应. 这个交互功能需要监听器这个方法来实现. 监听器的实现三步骤 1.事件源:当前动作所发生的组件. 2.监听器:动作方法监 ...

  2. java仿qq gui_Java仿QQ登入页面

    1.[代码][Java]代码 package com.myqq.frame; import java.awt.BorderLayout; import java.awt.Color; import j ...

  3. Android 仿今日头条、网易新闻的频道管理

    最近做新闻类型的项目,用到了频道管理,点击删除排序,拖动排序.来分享一下 下面上代码: MainActivity 布局 <?xml version="1.0" encodin ...

  4. android qq分组展开,Android仿qq分组管理的第三方库

    本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下 下面先看效果 我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便 ...

  5. Android仿QQ侧滑菜单

    先上效果图: GIF图有点模糊,源码已上传Github:Android仿QQ侧滑菜单 ####整体思路: 自定义ItemView的根布局(SwipeMenuLayout extends LinearL ...

  6. win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退。

    #问题描述 win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退. #解决方案 开始卸载重装也不行 安装TiM也一样会发生,最后删除找到错误报告提示的c盘 ...

  7. webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法

    webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法..怎么做..求指导

  8. Android仿QQ通讯录分组展示ExpandableListView

    Android仿QQ通讯录分组展示ExpandableListView 核心是重写BaseExpandableListAdpter,其实和之前写的普通的BaseAdapter是类似的, 但是BaseE ...

  9. 43.【Java 实现验证码获取 C++实现密码加密和删除和QQ登入系统】

    Java实现验证码信息 (一).简要概述: 1.思路分析 2.代码展示: 3.效果展示: (二).密码加密C++操作 1.基本思路和解析: 2.代码展示: (三).QQ登入系统: 1.建设QQ登入系统 ...

最新文章

  1. 由线性回归来理解深度学习的理论基础
  2. eeglab中文教程系列 汇总
  3. zynq交叉编译环境
  4. JAVA线程池管理及分布式HADOOP调度框架搭建
  5. 如何正确使用穿线管 穿线管布局解析
  6. stn,spatial transformer network总结
  7. ab不同时为0c语言程序表达式,2016年暨南大学信息科学技术学院C语言程序设计复试笔试最后押题五套卷...
  8. mysql+phpmyadmin配置流程
  9. 秘罗地伤痕 -- 暂存小说草稿
  10. Mockito—参数匹配
  11. Python str / bytes / unicode 区别详解 - Python零基础入门教程
  12. 能量采集(HYSBZ-2005)
  13. msu文件无法运行_如何打开msu文件
  14. 漏洞复现|CVE-2021-40444(Microsoft MSHTML 远程代码执行漏洞)
  15. win10中安装step7 5.6
  16. 大数据安全和网络安全基础知识
  17. linux双网卡配置,静态路由表配置
  18. 观察者模式(C语言实现)
  19. 怎么找电脑服务器文档,怎么找到电脑的服务器地址
  20. 数据库基本操作-----数据库用户管理和授权

热门文章

  1. 题目81:输入任一的自然数A, B, 求A , B的最小公倍数。
  2. C语言 输出二维数组任一行任一列元素的值
  3. 南大通用GBase 8s+浪潮K1 Power联合解决方案 助力城市轨道交通国产化进程
  4. CSS伪类选择器nth-child 选择3的倍数个元素写法
  5. iNode Mac版本下载(亲测兼容M1 Pro)
  6. Vmware vCenter Server Appliance (VCSA6.0)安装
  7. win7 多个tomcat启动配置方法
  8. 7N60-ASEMI高压N沟道MOS管7N60
  9. python监控网页更新_【小白教程】Python3监控网页
  10. 虚拟+现实:半实物仿真测试有效保证嵌入式系统的健壮与可靠