zoukankan      html  css  js  c++  java
  • 电子书学习笔记

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

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

    首先主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为橙黄底色,有时候我们需要去掉这种效果

  • 相关阅读:
    哈希表详解
    简单字典实现(KV问题)
    【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归)
    【数据结构】——堆及其应用
    初学者的迷茫
    【数据结构】顺序表和链表
    程序运行机理
    回调函数到底是怎么一回事呢?
    C语言中函数可变参数解析
    《剑指offer》数组中出现次数超过数组长度一半的数字
  • 原文地址:https://www.cnblogs.com/benxiong/p/4968989.html
Copyright © 2011-2022 走看看