电子书学习笔记

闲的蛋疼的人生,没有压力,所以人变得碌碌无为,立刻加压吧!

自己想做一个电子书,所以就反编译了一个豌豆荚的软件,仅作学习交流 只用,以下为学习过程,应该写的很细,最后将会增添源代码,计划用两天做完,若做不完,从第二年天开始不睡觉,立贴为誓

首先主Activity是:StarActivey,

第一段:

     

public class StarActivey extends Activity {
boolean isRead = false;
int state;
int scrWidth, scrHeight;
int curFiles = 0;
Splash splash;
int curTab = 0;
TabHost mTabHost;
ListView cagalotlist;
Spinner sp_textColor, sp_backColor, sp_textSize, sp_textStyle;
Button setButton;
private List<Integer> contentList = new ArrayList<Integer>();// 防止空指针,章节id列表//
Menu menu;
public TextView[] markTextViews = new TextView[5];
Handler myHandler = new Handler() {// 用来更新UI线程中的控件
public void handleMessage(Message msg) {
if (msg.what == 1) {//
if (splash != null) {
splash.isLoop = false;
splash.exit();

splash = null;
}
curTab = 0;
creatTableHost();
} else if (msg.what == 2) {
creatTableHost();
} else if (msg.what == 4) {
finish();
}

}
};

如果splash != null 的话,将会显示splash ,然后再显示creatTableHost();

然后咱们看一下splash 是怎么写的,问题是splash 什么,贺兰鹰也不知道,所以先学习一下什么叫splash

首先开一下http://blog.csdn.net/hitlion2008/article/details/7969016,里面有初步的解释,就是应用程序启动之前先启动一个画面,如下来个例子试验一下

public class MainActivity extends Activity {
/**
* Called when the activity is first created.
*/

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().setFormat(PixelFormat.RGBA_8888);//解决图片资源失真问题
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);//抖动效果,有时候不明显,可以参照http://wang-peng1.iteye.com/blog/715636

setContentView(R.layout. );

//Display the current version number
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo("com.android.simple", 0);
TextView versionNumber = (TextView) findViewById(R.id.versionNumber);
versionNumber.setText("Version " + pi.versionName);
} catch (NameNotFoundException e) {
e.printStackTrace();
}

new Handler().postDelayed(new Runnable() {
public void run() {
/* Create an Intent that will start the Main WordPress Activity. */
Intent mainIntent = new Intent(MainActivity.this, wpAndroid.class);
MainActivity.this.startActivity(mainIntent);
MainActivity.this.finish();
}
}, 2900); //2900 for release

}
}

布局文件splashscreen

<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center|center"
android:orientation="vertical">
<!--
android:scaleType是控制图片如何resized/moved来匹对ImageView的size
CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
-->
<ImageView android:layout_marginTop="-60dip"
android:paddingLeft="20dip"
android:paddingRight="20dip"
android:scaleType="centerInside"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/wordpress_logo"
android:src="@drawable/wordpress_home">
</ImageView>
<!--
android:typeface 字体风格
-->
<TextView android:text="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:typeface="serif"
android:shadowDx="0"
android:shadowDy="2"
android:shadowRadius="1"
android:shadowColor="#FFFFFF"
android:textColor="#444444"
android:textSize="20dip"
android:id="@+id/versionNumber"
android:gravity="bottom">
</TextView>
</LinearLayout>

第二个函数:

public class wpAndroid extends Activity {
//private ImageView bitmap;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//findViewById(R.id.wordpress_logo).getBackground().setDither(true);
// Toast.makeText(this, "dadf", Toast.LENGTH_LONG).show();
setContentView(R.layout.another);

}
}

第二个布局文件:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="top">

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="lan duo">
</Button>
<ImageView
android:id="@+id/wordpress_home"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:dither="true">
</ImageView>


</LinearLayout>

好,通过例子大体了解了splash是什么东东了

接下来继续回归正题,

if (msg.what == 1) {//
if (splash != null) {
splash.isLoop = false;
splash.exit();

splash = null;
}

这一个是用来第一次进入显示splash的

onCreate 函数

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//常用必须记住
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//常用必须记住
DisplayMetrics dm = new DisplayMetrics();//获取分辨率
getWindowManager().getDefaultDisplay().getMetrics(dm);//将当期窗口的一些信息放在DisplayMetrics中
scrWidth = dm.widthPixels;
scrHeight = dm.heightPixels;
System.out.println("scrWidth="+scrWidth+"scrHeight="+scrHeight);
try {
Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("date");

//返回监听,当按到backpress键的时候,如果不是将播放splah 的效果
if (bundle.getInt("curTab") == 1) {
creatTableHost();
} else {

setSplash();
}
} catch (Exception e) {
// TODO: handle exception
setSplash();
}

}

说道这里就不得不说一下debug 和logcat,debug 流程我将在以后逐渐补全,logcat的过滤,刚开始不知道填哪个才能出来system信息,后来验证,要想打出System.out.println,只需要Filter Name 和 By Log Tag 中分别写上System.out即可

 

那接着来看一下creatTableHost()该方法是怎么实现的,

 

public void creatTableHost() {
isRead = false;
state = Const.STATE_TABHOST;//2
setContentView(R.layout.fav);//需要重点分析
// kuguo的嵌入式service Start
KuguoAdsManager.getInstance().receivePushMessage(StarActivey.this,
false);
KuguoAdsManager.getInstance().showKuguoSprite(this,
KuguoAdsManager.STYLE_KUZAI);
KuguoAdsManager.getInstance().setKuzaiPosition(false, 100);
ServiceManager manager = new ServiceManager(this);
manager.startService();
// kuguo的嵌入式service End
cagalotlist = (ListView) findViewById(R.id.tab_listview);
CreatListView();
}

对于这个大函数,仔仔细细的分析

第一点,对于isRead = false,可能是创建table 之前没有阅读,所以就设置为false,纯属个人猜测

第二点,对于布局我要仔细去看,这是最基本的

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
<!-- 死记硬背的东西 -->
android:padding="0px" android:background="#FFF5F5F5"
android:orientation="vertical">
<include layout="@layout/titlebar" />
<ListView android:cacheColorHint="#00000000" android:background="@drawable/bookshelf_layer"
android:scrollbarStyle="outsideInset" android:id="@+id/tab_listview"
android:paddingTop="5.0dip" android:layout_width="fill_parent"
android:layout_height="0.0dip" android:listSelector="@color/transparent"
android:divider="@color/transparent" android:dividerHeight="5.0dip"
android:layout_weight="1.0" />
<!-- android:layout_marginLeft="5.0dip" 表示list距离两个边界有距离
android:layout_marginRight="3.0dip" -->
</LinearLayout>
padding请参考http://www.cnblogs.com/renqingping/archive/2012/10/16/MarginBorderPadding.html,讲的非常好 。简而言之,padding 是指子控件,margin是父控件
对于颜色比较反感,好在有张RGB的对照表,http://www.114la.com/other/rgb.htm "#FFF5F5F5" 是浅颜色
android:orientation 有两个参数vertical 是竖直另一个是horizontal 水平。丢人,刚开始时horizontal都不会拼写

listView.setCacheColorHint(0); 或者android:cacheColorHint="#000000" 去除listview的拖动背景色

自定义listview的时候,当你不使用android:cacheColorHint=“#00000000”会出现下面选中一个空间黑色底色的情况,破坏整体美观度:

当你不使用android:listSelector属性,默认会显示选中的item为橙黄底色,有时候我们需要去掉这种效果

posted @ 2015-11-16 15:20  kanrun  阅读(150)  评论(0编辑  收藏  举报