当前位置:  编程技术>移动开发
本页文章导读:
    ▪QQ阅读器技术框架解析之三《代码预览跟分析》        QQ阅读器技术框架解析之三《代码预览和分析》 本文主要介绍书架的架构 BookStandActivity extends ReaderBaseActivity implements DialogInterface.OnCancelListener, View.OnCreateContextMenuListener 入口函数:onCreate1. .........
    ▪ 混同变化(移动,旋转,缩放)的顺序        混合变化(移动,旋转,缩放)的顺序 在opengl和android的canvas对于图形的变化都是用矩阵来操作的,如移动,旋转,缩放。对于组合变化,就是让这些多种变化的矩阵进行相乘,而矩阵的乘法.........
    ▪ 运用URLConection获取信息       使用URLConection获取信息 介绍完URI,在来一篇互联网方面的内容吧,后面要对c层一探究竟了,虽然还有很多东西可以学,但是,还是完成主线在回头弄清楚所有东西吧。使用Socket却是是一.........

[1]QQ阅读器技术框架解析之三《代码预览跟分析》
    来源: 互联网  发布时间: 2014-02-18
QQ阅读器技术框架解析之三《代码预览和分析》
本文主要介绍书架的架构
BookStandActivity extends ReaderBaseActivity implements DialogInterface.OnCancelListener, View.OnCreateContextMenuListener

入口函数:onCreate
1. 设置notitle(这个可以放到activity的配置文件中)
2. 设置layout为new_bookstand.xml:顶部阴影,两侧图片中间是自定的listview:com.qq.reader.view.SpringListView.java,这个list是可以支持整体滑动效果的,从1.0版本到现在始终是这个listview。
3. 初始化listview的适配器
   1. 获取屏幕宽度,除以每本所占的宽度,计算每行可以展示书本个数cols,这样解决了多种屏幕展示的问题
   2. 获取屏幕高度,除以每行书架所占的高度,计算每屏幕可以展示的书架行数rows,书架最小行数为cols+1;
   3. getCount即list的行数等于:(书本总个数 + 1)除以每行展示的个数;
   4. getView,单个视图为new_liner_item.xml,它其实是个linearLayout,用于存放单个书本的view,本质上是每行的容器,其中设置了背景等基本排版信息。
      1. 生成每本书的layout对象bookmarkstanditem.xml,渲染模板后,添加到父容器linearLayout中。直到填满每行展示的书本个数。
      2. 如果父容器已经存在,则便利父容器的子视图对象,逐一渲染
   5. getItem/getItemId,大家都懂得。
   6. listview添加了header,本质是textView,就是书架上方的广告栏,支持点击事件
   7. 书本的点击函数在哪里?
      1. 不可在listview上添加点击,因为书本知识listview每行中的一本,点击事件只能添加到每本书的布局视图上
      2. QQ的点击事件在书本视图的最外层RelativeLayout上,并把当前书本的id放在tag中,当点击书本时,点击函数从getItem传入tag,获取书本对象,打开书本。
   8. 书本的长按函数在哪里?
      1. 同样也在layout上,长按函数本质是图案出一个对话框,根据layout的tag中的书本id获取书本对象后,渲染dialog的内容。

    
[2] 混同变化(移动,旋转,缩放)的顺序
    来源: 互联网  发布时间: 2014-02-18
混合变化(移动,旋转,缩放)的顺序

在opengl和android的canvas对于图形的变化都是用矩阵来操作的,如移动,旋转,缩放。对于组合变化,就是让这些多种变化的矩阵进行相乘,而矩阵的乘法不满足交换律,之这一点上,就可以看出组合变化也不满足交换律。

例如:要实现下面两张图形的变化,我们要怎样做:


 


 

首先想像一下,只有先缩放再旋转,图形才能变成上图,如果是先旋转再缩放,再就会变成下面的图形(变化会对其中的每个点进行矩阵变化):



 

那代码要怎样写了:

 

// 变化一(这个变化其实,才是我们想要的)
gl.glRotatef(45, 0, 0, 1); 
gl.glScalef(2, 0.5f, 1); 

// 变化二(与我们的想要的结果相差很远)
gl.glRotatef(45, 0, 0, 1); 
gl.glScalef(2, 0.5f, 1); 
   

 这里我们可能就会把我们弄混淆了,可事实就是要这样去写,那如何才能让我们不会被弄混淆了,记住一点:last specified, first  applied(后指定的变化,先被执行变化),

 


    
[3] 运用URLConection获取信息
    来源: 互联网  发布时间: 2014-02-18
使用URLConection获取信息
介绍完URI,在来一篇互联网方面的内容吧,后面要对c层一探究竟了,虽然还有很多东西可以学,但是,还是完成主线在回头弄清楚所有东西吧。使用Socket却是是一个很底层的方法,用起来灵活性会比较大,但是不方便。日常使用,书中推荐封装好的URLConnection代替繁琐的各种过程。
在工作中,还是使用原始的http post之类的apache包可能会更有自由些。不过,使用connection也肯定是完全没问题的。
我理解的是,URLConnection比Socket是再更高一级的抽象,所以,你可以使用一些封装好的接口,而无需重新创造轮子。啰嗦了这么多,看段代码,所有情况就一目了然了。
首先是得到URL
URL url = new URL("http://java.sun.com");

然后得到URLConnection
URLConnection connection = url.openConnection();

如果你想访问一个有口令保护的Web服务,则可使用下面的用法
String username = "";
String password = "";
String input = username + ":" + password;
String encoding = base64Encode(input);
connection.setRequestProperty("Authorization", "Basic" + encoding);

然后我们可以连接了,默认是输入流,所以不用使用setDoInput(true);
connection.connect();

最后,我们来看看connection能给我们带来什么
首先可以得到响应头字段
Map<String, List<String>> headers = connection.getHeaderFields();
for(Map.Entry<String, List<String>> entry : headers.entrySet()){
    String key = entry.getKey();
    for(String value : entry.getValue()) {
        System.out.print(key + ":" + value);
    }
}

java提供了6种常见的响应头字段获取方法
System.out.print("" + connection.getContentType());

System.out.print("" + connection.getContentLength());

System.out.print("" + connection.getContentEncoding());

System.out.print("" + connection.getDate);

System.out.print("" + connection.getExpirition());

System.out.print("" + connection.getLastModified());

最后,获得数据流
Scanner scanner = new Scanner(connection.getInputStream());

while(scanner.hasNextLine()){
    System.out.print("" + scanner.nextLine());
}

由于setRequestProperty()是一个可以赋值所有name/value的请求头函数,其实也存在一些set方法可以简单的赋值请求头,如setIfModifiedSince(),setUseCaches()(只对applet有用)。
输出流使用
connection.getOutputStream();

使用方法和Socket差不多。看,就是多了很多方便的方法而已。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3