高仿新闻教程-开源框架的简单实现——网易新闻的标题栏(一)
周末闲着没事,老师布置的作业都没完成,就简单去去实现下,还记得下午的写的联网的一个asnc——http框架的实现..........现在大多数APP,都在用大量的框架实现,不容置疑这样是提高了开发速度,但是新手 也会走上歪路,不断去用开源框架,其原理都不知道。 我们要做的就是下图:
小新我呢,写这篇文章的时候 2014.11.2.上图的效果 你用框架可以很简单的实现,Android-ViewPagerIndicator 我赶上了安卓的末班车,现在世界是浮躁的,做开发的有几个能静下心的写下博客呢,所以既然静下心了,那就好好的做点有意义的事吧。
雄起吧,骚年~~~~~
大家看到这个效果是不是觉得,卧槽,这么高级的东西,感觉很难搞啊,说实话我也做不出这么美观的东西,因为我没有美工...............
首先呢 这个布局 你可以看 首先相对布局, ------思考时间------------ 然后呢 右边应该是一个button组建 功能 滑动左边的标题------------思考时间---------------
能够滑动的东西 除了ScrollView 还有谁呢,正好里面有个 HorizontalScrollView 里面镶嵌一个线性布局 填充GridView
<RelativeLayoutandroid:id="@+id/categorybar_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="-18.0dip"android:background="@drawable/categorybar_background" ><Buttonandroid:id="@+id/category_arrow_right"android:layout_width="6.0dip"android:layout_height="10.0dip"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginLeft="2.0dip"android:layout_marginRight="10.0dip"android:background="@drawable/categorybar_right_arrow" /><HorizontalScrollViewandroid:id="@+id/category_scrollview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="6.0dip"android:layout_toLeftOf="@id/category_arrow_right"android:scrollbars="none" ><LinearLayoutandroid:id="@+id/category_layout"android:layout_width="wrap_content"android:orientation="horizontal"android:layout_height="wrap_content"android:gravity="center_vertical" /></HorizontalScrollView></RelativeLayout>
gridview 我将在main.java 里面填充
因为在代码里只能写PX,所以我用了一个工具类,将PX转换成dp 这也是为了适配考虑 在最后的时候 我会将代码贴出来的,不过代码有点乱,我分开 讲
在代码中 填充gridview
GridView category = new GridView(this);category.setColumnWidth(mColumnWidthDip);// 每個單元格的寬度category.setNumColumns(GridView.AUTO_FIT);// 單元格數目category.setGravity(Gravity.CENTER);// 設置對其方式// 設置單元格選擇是背景色位透明,這樣選擇時就不實現黃色背景category.setSelector(new ColorDrawable(Color.TRANSPARENT));// 根據單元格寬度和數目計算總寬度int width = mColumnWidthDip * categories.size();System.out.println(width);LayoutParams params = new LayoutParams(width, LayoutParams.WRAP_CONTENT);
有了gridview 以后 要填充数据不是,对于标题,最好是从网络获取 然后填充,不过我先放在 res 文件中
String[] categoryArray = getResources().getStringArray(
R.array.categories);
gridview 我们是需要填充到 线性布局里面去的 gridview 又要填充 数据
我们先填充gridview的数据吧 不知道大家记不记得 gridview怎么填充数据 --------思考时间--------- 因为是数据是文字 所以 最简单的就是 SimpleAdapter
SimpleAdapter 第一参数是 填充的activity 第二个参数 是一个map集合也是我们要填充的数据 所以呢 只有将数据 用map集合装起来呗
// 獲得新聞分類String[] categoryArray = getResources().getStringArray(R.array.categories);// 把新聞分類保存到List中List<HashMap<String, String>> categories = new ArrayList<HashMap<String, String>>();for (int i = 0; i < categoryArray.length; i++) {HashMap<String, String> hashMap = new HashMap<String, String>();hashMap.put("category_title", categoryArray[i]);categories.add(hashMap);}
第三个参数是要填充的布局, 第四个是个数组,是从map集合中填充到 第五个界面的那个空间里面去
// 創建Adapter,指明映射字段SimpleAdapter categoryAdapter = new SimpleAdapter(this, categories,R.layout.category_title, new String[] { "category_title" },new int[] { R.id.category_title });
后面 就是将 实例化线性布局 将gridview 填充进来
最后还有一个 button的功能 添加点击事件,滑动标题
package com.example.SundayNews;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.GridView;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.SimpleAdapter;import com.example.SundayNews.utils.DensityUtil;public class MainActivity extends Activity {private final int COLUMNWIDTHPX = 55;private final int FLINGVELOCITYPX = 800;// 滚动距离private int mColumnWidthDip;private int mFlingVelocityDip;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);// 吧px转换成dipmColumnWidthDip = DensityUtil.px2dip(this, COLUMNWIDTHPX) + 90;mFlingVelocityDip = DensityUtil.px2dip(this, FLINGVELOCITYPX) + 90;// 獲得新聞分類String[] categoryArray = getResources().getStringArray(R.array.categories);// 把新聞分類保存到List中List<HashMap<String, String>> categories = new ArrayList<HashMap<String, String>>();for (int i = 0; i < categoryArray.length; i++) {HashMap<String, String> hashMap = new HashMap<String, String>();hashMap.put("category_title", categoryArray[i]);categories.add(hashMap);}// 創建Adapter,指明映射字段SimpleAdapter categoryAdapter = new SimpleAdapter(this, categories,R.layout.category_title, new String[] { "category_title" },new int[] { R.id.category_title });GridView category = new GridView(this);category.setColumnWidth(mColumnWidthDip);// 每個單元格的寬度category.setNumColumns(GridView.AUTO_FIT);// 單元格數目category.setGravity(Gravity.CENTER);// 設置對其方式// 設置單元格選擇是背景色位透明,這樣選擇時就不實現黃色背景category.setSelector(new ColorDrawable(Color.TRANSPARENT));// 根據單元格寬度和數目計算總寬度int width = mColumnWidthDip * categories.size();System.out.println(width);LayoutParams params = new LayoutParams(width, LayoutParams.WRAP_CONTENT);// 更新category寬度和高度,這樣category在一行顯示category.setLayoutParams(params);// 設置適配器category.setAdapter(categoryAdapter);// 把category加入到容器中LinearLayout categoryList = (LinearLayout) findViewById(R.id.category_layout);categoryList.addView(category);// 箭头final HorizontalScrollView categoryScrollview = (HorizontalScrollView) findViewById(R.id.category_scrollview);Button categoryArrowRight = (Button) findViewById(R.id.category_arrow_right);categoryArrowRight.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {categoryScrollview.fling(mFlingVelocityDip);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
源码下载
下一篇地址 高仿新闻教程--Gridview的点击事件处理(2)
高仿新闻教程-开源框架的简单实现——网易新闻的标题栏(一)相关推荐
- 推荐一个高仿微信的开源项目,有点屌!
点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 前言 该项目是一款高仿微信的开源项目,iOSAppTemplate代码重构,基于T ...
- GitHub上有个高仿微信的开源项目,超厉害的!
开发者(KaiFaX) 面向全栈工程师的开发者专注于前端.Java/Python/Go/PHP的技术社区 来源 | GitHub科技 前言 该项目是一款高仿微信的开源项目,iOSAppTemplate ...
- android+高仿+日历,Android开源的精美日历控件,热插拔设计的万能自定义UI
UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的插座接口,与自定义Behavior是一样的思想. 听说第一页无 ...
- web前端开发常用的10个高端CSS UI开源框架
随着人们对体验的极致追求,web页面设计也面临着新的挑战,不仅需要更人性化的设计理念,还需要设计出更酷炫的页面.作为web前端开发人员,运用开源资源,更快更好地实现一些现代化的界面,是必备技能之一.下 ...
- android 字体慢慢变大 网易新闻,如何在网易新闻中设置字体大小?在网易新闻中设置字体大小的方法...
大家经常使用网易新闻吧,我们可以在里面查看许多新的消息,下面小编给大家分享一下在网易新闻中设置字体大小的方法,希望会对你有所帮助. 1.打开网易新闻客户端,进入网易新闻主界面后,在主界面中可以看到当天 ...
- android通讯录项目_Flutter高仿微信项目开源-具即时通讯IM功能
项目地址:https://github.com/fluttercandies/wechat_flutter wechat_flutter Flutter版本微信 效果图: 下载体验(Android): ...
- 获取macos mojave_高仿MacOS教程
"潮办公" 关注我们 拥有一台MacBook是很多人的梦想,但是高昂的售价成功逼退了一大波人.MacBook一直以颜值高.轻薄.系统流畅而出名,那么其他的小伙伴们想体验一波苹果系统 ...
- 开源版的高仿 “ 微信 ”,吊炸天!
大家好,今天给大家分享一个高仿微信的开源项目,希望大家喜欢! 前言 该项目是一款高仿微信的开源项目,iOSAppTemplate代码重构,基于TLKit. ZZFLEX实现. 已实现的功能 1. 消息 ...
- 推荐一个高仿微信的项目 有点屌!!
点击上方"小强的进阶之路",选择"星标"公众号 优质文章,及时送达 预计阅读时间: 分钟 1 前言 该项目是一款高仿微信的开源项目,iOSAppTemplate ...
最新文章
- mark一下总是记混的重定向与转发的区别
- jforum oracle报错,JForum安装在Oracle数据库上
- iOS安全攻防(三):使用Reveal分析他人app
- JS和JQUERY的区别
- Linux下源码安装CodeBlocks
- Apache https服务器配置笔记
- 为什么嵌入式工程师会对8位MCU有误解?
- Mongodb千万级数据在python下的综合压力测试及应用探讨
- 区分关联、依赖和聚集关系
- 20165329 学习基础和c语言调查
- JAVA运算的类型兼容原则_Java基础语法回顾(一)
- mock数据和代码生成
- list是否包含字符串_Python创建list
- Thinkpadt450 win7下面禁用触摸板
- Kinect体感游戏开发思考
- 解决 VMWare 15.5.5 安装 CentOS 7 出现大小写混乱问题
- 2022-2027年中国农村小额贷款行业市场调研及未来发展趋势预测报告
- Java基础案例:查找水仙花数(for循环)详解
- CSS3实现实时时间数字滚动
- 【Tools】Linux远程连接工具(Xshell6)
热门文章
- 蓝桥杯嵌入式AD采样解析
- 揭秘TVS管是否能替代稳压二极管吗?
- 你吸烟吗......
- bug系列(二)release版本DLL报错,debug版本正常
- 监听器——Listener(简述、自定义监听器) 略,过滤器与拦截器
- Solving 3D Inverse Problems using Pre-trained 2D Diffusion Models
- 泊松融合实现图片拼接
- 全球与中国液体壁纸行业需求趋势及投资策略分析报告2022-2028年
- 云计算应用越来越广泛,云计算用户需要注意的主要趋势有哪些?
- 【Zigbee】解密Zigbee地址分配——你需要知道的一切