博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一步步实现 仿制Android LOL多玩盒子(一) 概览
阅读量:4593 次
发布时间:2019-06-09

本文共 7513 字,大约阅读时间需要 25 分钟。

一、起源

最近比较闲,玩LOL的时候感觉 Android LOL多玩盒子 里面应用到的东西挺多也挺有意思,打算仿照着做一个。抱着练练手的心态,打算只使用原APK中的图片,代码和布局均自己实现。由于该应用涉及的内容较多、个人能力和空闲时间受限,可能部分功能难以实现。项目完成度达到一定程度后会将代码放到 csdn code中去。如果涉及到版权问题,请告知,我将立刻处理。

二、简单的初步分析

1,仿制过程需要使用的工具

抓包工具Fiddler、图片异步加载框架 universal-image-loader、网络请求框架android-async-http、Json解析工具jacksonjson、百度地图SDK、可能会需要使用到html解析工具 htmlparser。

2,主界面布局分析

官方版本界面如下。底部一排工具按钮,控制上半部分功能界面的切换。可能是因为在资讯页面中左右滑动的事件用来切换资讯类型了,各功能界面的之间的切换不支持左右滑动。于是,这一框架的实现比较简单,各功能界面分别放在Fragment中,底部的工具按钮控制各Fragment的显示或隐藏。标题栏的实现方式,不打算使用ActionBar,而是在布局中自己实现。

三、主界面初步实现

主界面Activity

package com.warren.lolbox;import android.app.Activity;import android.app.FragmentTransaction;import android.os.Bundle;import com.warren.lolbox.model.BaseContentFragment;import com.warren.lolbox.model.IListener;/** * 主界面 * @author warren * @date 2014年12月28日 */public class MainActivity extends Activity {	private FootFragment mFootFrag;	/**	 * 用于各功能Fragment切换的监听器	 */	private IListener
mListener; private BaseContentFragment[] mFragContents = new BaseContentFragment[5]; private int mCurrentFragIndex = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListener = new IListener
() { @Override public void onCall(Integer t) { FragmentTransaction tranc = getFragmentManager().beginTransaction(); tranc.hide(mFragContents[mCurrentFragIndex]); // 如果功能Fragment之前从未打开过,则创建并添加之;如果打开过,则显示之。 if (mFragContents[t] == null) { switch (t) { case 0: mFragContents[t] = new ToolFragment(); break; case 1: mFragContents[t] = new NewsFragment(); break; case 2: mFragContents[t] = new ChatFragment(); break; case 3: mFragContents[t] = new ActionFragment(); break; case 4: mFragContents[t] = new FindFragment(); break; default: break; } tranc.add(R.id.fl_main_frags, mFragContents[t], mFragContents[t].getName()); } else { tranc.show(mFragContents[t]); } tranc.commit(); mCurrentFragIndex = t; } }; initFrags(); } /** * 添加初始Fragment */ private void initFrags() { FragmentTransaction tranc = getFragmentManager().beginTransaction(); mFootFrag = new FootFragment(); // 设置工具选中监听器回调。 mFootFrag.setListeners(mListener); tranc.add(R.id.ll_main_foot_root, mFootFrag, mFootFrag.getName()); mFragContents[0] = new ToolFragment(); tranc.add(R.id.fl_main_frags, mFragContents[0], mFragContents[0].getName()); tranc.commit(); }}

第一个内容Fragment

package com.warren.lolbox;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.warren.lolbox.model.BaseContentFragment;import com.warren.lolbox.model.SimpleTool;/** * 工具Fragment * @author warren * @date 2014年12月28日 */public class ToolFragment extends BaseContentFragment {	private static String LOGTAG = "ToolFragment";	private LinearLayout mLlRoot;	private GridView mGridTools;	private AdapterGridTools mAdapter;	private List
mTools = new ArrayList
(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mLlRoot = (LinearLayout) inflater.inflate(R.layout.frag_tool, container, false); initTools(); initCtrl(); return mLlRoot; } private void initTools() { SimpleTool stBMYX = new SimpleTool(R.drawable.tool_menu_hero, R.string.toolmenu_bmyxtest); SimpleTool stHero = new SimpleTool(R.drawable.tool_menu_hero, R.string.toolmenu_yx); SimpleTool stVideo = new SimpleTool(R.drawable.tool_menu_video, R.string.toolmenu_video); SimpleTool stShake = new SimpleTool(R.drawable.tool_menu_shake, R.string.toolmenu_shrink); SimpleTool stLottery = new SimpleTool(R.drawable.tool_menu_shake, R.string.toolmenu_lottery); SimpleTool stNews = new SimpleTool(R.drawable.tool_menu_news, R.string.toolmenu_boxnews); SimpleTool stLiveShow = new SimpleTool(R.drawable.tool_menu_live, R.string.toolmenu_liveshow); SimpleTool stReflectTest = new SimpleTool(R.drawable.tool_menu_video, R.string.toolmenu_reflecttest); SimpleTool stBaike = new SimpleTool(R.drawable.tool_menu_baike, R.string.toolmenu_baike); mTools.add(stBMYX); mTools.add(stHero); mTools.add(stVideo); mTools.add(stShake); mTools.add(stLottery); mTools.add(stNews); mTools.add(stLiveShow); mTools.add(stReflectTest); mTools.add(stBaike); } private void initCtrl() { mGridTools = (GridView) mLlRoot.findViewById(R.id.grid_tools); mAdapter = new AdapterGridTools(LayoutInflater.from(mLlRoot.getContext())); mAdapter.setTools(mTools); mGridTools.setAdapter(mAdapter); mGridTools.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView
parent, View view, int position, long id) { } }); } @Override public String getName() { return "ToolFragment"; } /** * 工具网格的Adapter * @author warren * @date 2014年12月28日 */ class AdapterGridTools extends BaseAdapter { private LayoutInflater inflater; private List
lstTools; public AdapterGridTools(LayoutInflater inflater) { this.inflater = inflater; } public void setTools(List
tools) { this.lstTools = tools; } @Override public int getCount() { return mTools.size(); } @Override public Object getItem(int position) { return mTools.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.frag_tool_grid, parent, false); holder = new ViewHolder(); holder.img = (ImageView) convertView.findViewById(R.id.img); holder.tv = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.img.setImageResource(lstTools.get(position).imgResId); holder.tv.setText(lstTools.get(position).txtResId); // 设置GridView的子项完全填充GridView AbsListView.LayoutParams param = new AbsListView.LayoutParams( android.view.ViewGroup.LayoutParams.MATCH_PARENT, mGridTools.getHeight() / (lstTools.size() / 3)); convertView.setLayoutParams(param); return convertView; } class ViewHolder { ImageView img; TextView tv; } }}
几个基础类和接口

package com.warren.lolbox.model;public interface IBaseContentFragment extends IBaseFragment{}
package com.warren.lolbox.model;import android.app.Fragment;/** * 内容Fragment的基类 * @author warren * @date 2014年12月28日 */public abstract class BaseContentFragment extends Fragment implements IBaseContentFragment {}

package com.warren.lolbox.model;public interface IBaseContentFragment extends IBaseFragment{}

package com.warren.lolbox.model;public interface IListener
{ public void onCall(T t);}

package com.warren.lolbox.model;/** * 简单元工具 * @author warren * @date 2014年12月28日 */public class SimpleTool {		public int imgResId;	public int txtResId;		public SimpleTool(int imgResId, int txtResId) {		super();		this.imgResId = imgResId;		this.txtResId = txtResId;	}	}
初步的主界面效果

转载于:https://www.cnblogs.com/warrenys/p/4196522.html

你可能感兴趣的文章
正则表达式语法大全
查看>>
DateUtils
查看>>
pb开发的客户端,使用oracle 9i客户端 提示oci.dll could not be loaded
查看>>
wordpress调用指定post type文章怎么操作
查看>>
magento开发手册之目录结构
查看>>
换个红圈1微信头像恶搞一下好友
查看>>
javascript学习_廖大_20170218
查看>>
bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队
查看>>
火车头采集基本使用
查看>>
MYSQL中插入数据以及修改数据的部分方法
查看>>
unity中遍历动画得到动画名字和动画数量
查看>>
调整WebLogic的时间
查看>>
Linux学习笔记总结--配置iptables防火墙
查看>>
win10 安装mysql
查看>>
SQL文 Update From 写法
查看>>
pyc文件的本质
查看>>
洛谷 - P2602 - 数字计数 - 数位dp
查看>>
android 环境配置 与 运行错误
查看>>
打电话的代码
查看>>
C++ STL stack(栈)
查看>>