Android 两Activity之间动画效果———翻页效果

用Android rotate动画实现翻页效果,效果如图: ![](http://img.blog.csdn.net/20130826221333046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhemFpOTYzMTg0NzA5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 要实现上面动画,首先搞明白rotate动画原理; (1)Degrees坐标: 0度(360度) 270度![](http://img.blog.csdn.net/20130826214747859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhemFpOTYzMTg0NzA5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 90度 顺时针旋转 180 (2)rotate 关键属性 fromDegrees 开始旋转时角度 toDegrees 结束时的角度 pivotX,pivotY 旋转时的中心点 他们范围是 0—100%p (0,0)代表左上角,(100%p, 100%p)右下角 duration 动画持续时间 毫秒为单位 知道了这两点就可以实现了 在res新建 anim 文件夹 新建 离开Activity时的xml **[html]** [view plain](http://blog.csdn.net/huazai963184709/article/details/10364243#)[copy](http://blog.csdn.net/huazai963184709/article/details/10364243#)[print](http://blog.csdn.net/huazai963184709/article/details/10364243#)[?](http://blog.csdn.net/huazai963184709/article/details/10364243#) - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><?</span><span class="tag-name" style="font-weight: bold; color: #993300;">xml</span> <span class="attribute" style="color: red;">version</span>=<span class="attribute-value" style="color: blue;">&#8220;1.0&#8221;</span> <span class="attribute" style="color: red;">encoding</span>=<span class="attribute-value" style="color: blue;">&#8220;utf-8&#8221;</span><span class="tag" style="font-weight: bold; color: #993300;">?></span> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">set</span> <span class="attribute" style="color: red;">xmlns:android</span>=<span class="attribute-value" style="color: blue;">&#8220;http://schemas.android.com/apk/res/android&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">rotate</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:duration</span>=<span class="attribute-value" style="color: blue;">&#8220;500&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:fromDegrees</span>=<span class="attribute-value" style="color: blue;">&#8220;0&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:pivotX</span>=<span class="attribute-value" style="color: blue;">&#8220;0&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:pivotY</span>=<span class="attribute-value" style="color: blue;">&#8220;0&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:toDegrees</span>=<span class="attribute-value" style="color: blue;">&#8220;0&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"></</span><span class="tag-name" style="font-weight: bold; color: #993300;">set</span><span class="tag" style="font-weight: bold; color: #993300;">></span> </span> <span style="color: #000000;">新建 进入Activity时的xml</span> **[html]** [view plain](http://blog.csdn.net/huazai963184709/article/details/10364243#)[copy](http://blog.csdn.net/huazai963184709/article/details/10364243#)[print](http://blog.csdn.net/huazai963184709/article/details/10364243#)[?](http://blog.csdn.net/huazai963184709/article/details/10364243#) <div> </div> </div> </div> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><?</span><span class="tag-name" style="font-weight: bold; color: #993300;">xml</span> <span class="attribute" style="color: red;">version</span>=<span class="attribute-value" style="color: blue;">&#8220;1.0&#8221;</span> <span class="attribute" style="color: red;">encoding</span>=<span class="attribute-value" style="color: blue;">&#8220;utf-8&#8221;</span><span class="tag" style="font-weight: bold; color: #993300;">?></span> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">set</span> <span class="attribute" style="color: red;">xmlns:android</span>=<span class="attribute-value" style="color: blue;">&#8220;http://schemas.android.com/apk/res/android&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">rotate</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:duration</span>=<span class="attribute-value" style="color: blue;">&#8220;500&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:fromDegrees</span>=<span class="attribute-value" style="color: blue;">&#8220;90&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:pivotX</span>=<span class="attribute-value" style="color: blue;">&#8220;100%p&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:pivotY</span>=<span class="attribute-value" style="color: blue;">&#8220;100%p&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:toDegrees</span>=<span class="attribute-value" style="color: blue;">&#8220;0&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"></</span><span class="tag-name" style="font-weight: bold; color: #993300;">set</span><span class="tag" style="font-weight: bold; color: #993300;">></span> </span> <span style="color: #000000;">最后就是代码调用了</span> **[html]** [view plain](http://blog.csdn.net/huazai963184709/article/details/10364243#)[copy](http://blog.csdn.net/huazai963184709/article/details/10364243#)[print](http://blog.csdn.net/huazai963184709/article/details/10364243#)[?](http://blog.csdn.net/huazai963184709/article/details/10364243#) - <span style="color: black;">Intent <span class="attribute" style="color: red;">intent</span> = <span class="attribute-value" style="color: blue;">new</span> Intent(ActivityAnimationDemo.this, activtyanimationdemo2.class); </span> - <span style="color: black;">startActivity(intent); </span> - <span style="color: black;">overridePendingTransition(R.anim.rotate_left, R.anim.rotate_right); </span> 解释一下应放入的参数 **[html]** [view plain](http://blog.csdn.net/huazai963184709/article/details/10364243#)[copy](http://blog.csdn.net/huazai963184709/article/details/10364243#)[print](http://blog.csdn.net/huazai963184709/article/details/10364243#)[?](http://blog.csdn.net/huazai963184709/article/details/10364243#) - <span style="color: black;">overridePendingTransition(进入时的动画,离开时的动画) </span> &nbsp; [源码下载](http://download.csdn.net/detail/huazai963184709/6016175)(为了方便,把移动和 旋转动画代码写一块了)

2014年6月23日 · 3 分钟 · 天边的星星

Android 页面左右切换动画实现

<div> slide_left_in.xml <?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?> <set xmlns:android=&#8221;http://schemas.android.com/apk/res/android&#8221;> <translate android:duration=&#8221;300&#8243; android:fromXDelta=&#8221;-100.0%p&#8221; android:toXDelta=&#8221;0.0&#8243; /> </set> slide_left_out.xml <?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?> slide_right_in.xml <?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?> slide_right_out.xml <?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?> </div> <div> </div> <div> 1. 在Style文件里面定义 </div> </div> 2.在Manifest里面application设置Theme android:theme=”@style/AppTheme” ...

2014年6月23日 · 1 分钟 · 天边的星星

Android开发者必知的5个开源库

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库。希望通过对它们的了解,能够对你的开发工作有所帮助。 ** ** 1. GSON Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可用于将Java对象转换成对应的JSON表示,也可以将JSON字符串转换成一个等效的Java对象。如果与API打交道的话,那么这将会是你经常需要的东西。我们主要使用JSON的原因就是,相较XML,轻量级的JSON要简单的多。 **[js]** [view plain](http://www.csdn.net/article/2014-06-16/2820224-top-5-android-libraries#)[copy](http://www.csdn.net/article/2014-06-16/2820224-top-5-android-libraries#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/394286)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/394286/fork) <div> </div> </div> - <span style="color: #000000;"><span class="comment" style="color: #008200;">// Serialize </span> </span> - <span style="color: #000000;">String userJSON = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Gson().toJson(user); </span> - <span style="color: #000000;"> </span> - <span style="color: #000000;"><span class="comment" style="color: #008200;">// Deserialize</span> </span> - <span style="color: #000000;">User user = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Gson().fromJson(userJSON, User.<span class="keyword" style="font-weight: bold; color: #006699;">class</span>); </span> 2. RETROFIT ...

2014年6月20日 · 6 分钟 · 天边的星星

MVP模式与MVC模式

源地址:http://www.cnblogs.com/cuihongyu3503319/archive/2009/01/09/1372820.html [MVP模式与MVC模式(转)](http://www.cnblogs.com/cuihongyu3503319/archive/2009/01/09/1372820.html) MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller。Alex在他的blog中对于这两者之间的比较很直观也比较清楚,原文可以下面的地址找到:[http://ameleta.spaces.live.com/blog/cns!5F6316345A821420!163.entry](http://ameleta.spaces.live.com/blog/cns!5F6316345A821420!163.entry)【译文】: **Model View Presenter vs Model View Controller** **简介** 在我工作中经常需要处理一些由于开发人员没能很清楚地理解MVC和MVP模式的区别的情况下使用它们而产生的问题。在这篇文章中我将会阐述一下我对两者之间区别的一些理解。 在N层体系结构中MVC/P模式仅仅只是用于表示层(presentation layer),理解这一点很重要。这两个模式并不是关于怎么构建数据层(data layer)和服务层(service layer)的,而是关于怎么将数据(data)从用户接口(view)中分离出来,以及用户接口如何与数据进行交互的。这些模式的使用让解除你的程序中表示层对对数据和控制逻辑的依赖,从而可以自由的变更表示层。 这两种模式的一般性概念 1、模型(Model)表示数据模型和业务逻辑(business logic)。模型并不总是DataSet,DataTable之类的东西,它代表着一类组件(components)或类(class),这些组件或类可以向外部提供数据,同时也能从外部获取数据并将这些数据存储在某个地方。简单的理解,可以把模型想象成“外观类(facade class)”。译注:这里的外观是指“外观模式”中所说的外观。外观的一般作用是为一个复杂的子系统提供高层次的简单易用的访问接口,可以参看下面的图来理解它的原理: ![](http://images.cnblogs.com/cnblogs_com/chen-cxb/1.jpg) 2、视图(View)将数据层现给用户。一般的视图都只是包含用户界面(UI),而不包含界面逻辑。比如,Asp.net中包含控件的页面(page)就是一个视图。视图可以从模型中读取数据,但是不能修改或更新模型。 3、层现器(Presenter)/控制器(Controller)包含了根据用户在视图中的行为去更新模型的逻辑。视图仅仅只是将用户的行为告知控制器,而控制器负责从视图中取得数据然后发送给模型。 **MVC/P模式的核心是为了将模型从视图/控制器中分离出来,从而使得模型独立于它们,因此模型不包含对视图和控制的引用。 什么是MVC(Model View Presenter)模式?** 1、为了使得视图接口可以与模型和控制器进行交互,控制器执行一些初始化事件 2、用户通过视图(用户接口)执行一些操作 3、控制器处理用户行为(可以用观察着模式实现)并通知模型进行更新 4、模型引发一些事件,以便将改变发告知视图 5、视图处理模型变更的事件,然后显示新的模型数据 6、用户接口等待用户的进一步操作 这一模式的有一下几个要点: 1、视图并不使用控制器去更新模型。控制器负责处理从视图发送过来的用户操作并通过与模型的交互进行数据的更新 2、控制器可以和视图融合在一块。Visual Studion中对Windows Forms的默认处理方式就是这样的。【译注:比如我们双击一个Button,然后在它的事件里写处理逻辑,然后将处理的数据写回模型中。这里处理逻辑时间应该是控制器的功能,但是我们并没有专门写一个控制器来做这件事情而是接受了VS的默认处理方式,将它写在Form的代码中,而这里的Form在MVC中它就是一个View。所以这说vs默认的处理方式是将把控制器和视图融合在一起的。】 3、控制器不包含对视图的渲染逻辑(rendering logic) **“主动—MVC”模式**,也是通常意义下的MVC模式 &nbsp; <div align="center"> ![](http://images.cnblogs.com/cnblogs_com/chen-cxb/2.jpg) </div> &nbsp; &nbsp; 【译注:为什么说是主动的?View不是等Controller通知它Model更新了然后才从Model取数据并更新显示,而是自己监视Model的更新(如果用观察者模式)或主动询问Model是否更新。前面那种等待Controller通知的方式是下面所介绍的“被动—MVC”的实现方式。】 **“被动—MVC”模式** 与主动MVC的区别在于: 1、模型对视图和控制器一无所知,它仅仅是被它们使用 2、控制器使用视图,并通知它更新数据显示 3、视图仅仅是在控制器通知它去模型取数据的时候它才这么做(视图并不会订阅或监视模型的更新) 4、控制器负责处理模型数据的变化 5、控制器可以包含对视图的渲染逻辑 ...

2014年6月20日 · 1 分钟 · 天边的星星

Android上传附件方法,直接复制可以用

Android上传附件方法,直接复制可以用 // 附件上传 public static String post(String actionUrl, String fileName) throws IOException { // 产生随机分割内容 String BOUNDARY = java.util.UUID.randomUUID().toString(); String MULTIPART_FROM_DATA = “multipart/from-data”; String CHARSET = “UTF-8”; // 定义URL实例 URL uri = new URL(actionUrl); // 定义HttpURLConnection实例,打开连接 HttpURLConnection conn = (HttpURLConnection) uri.openConnection(); // 设置从主机读取数据超时(单位:毫秒) conn.setReadTimeout(5 * 1000); // 设置允许输入 conn.setDoInput(true); // 设置允许输出 conn.setDoOutput(true); // 设置不允许使用缓存 conn.setUseCaches(false); // 设置为POST发送方法 conn.setRequestMethod(“POST”); // 设置维持长连接 conn.setRequestProperty(“connection”, “keep-alive”); // 设置文件字符集编码 conn.setRequestProperty(“Charset”, “UTF-8”); // 设置文件类型 conn.setRequestProperty(“Content-Type”, MULTIPART_FROM_DATA ...

2014年6月13日 · 2 分钟 · 天边的星星

Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/12684155 前段时间因为换工作的缘故又恰巧碰到国庆节,所以有段时间自己没有更新博客了,过完国庆到新公司报道,感觉还不错,就是现在住的地方离新公司有点远,地铁20站,伤不起啊,我每天早上7点多就要起床,然后屁颠屁颠的去挤地铁上班,晚上下班还要挤地铁,先不说路程远,车费一天就要10几块,我的银子啊,有坐龙华线去上班的深圳程序员不?听说那条线上班高峰期很挤?我没在上班高峰期坐过那趟车,我在民治那边找了个房子,离华强北也不远,关键房租便宜,哈哈,乐开花了,下个礼拜就要搬过去啦 不扯了,回到主题,今天给大家带来ListView的A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,我们知道一般我们对联系人,城市列表等实现A-Z的排序,因为联系人和城市列表我们可以直接从数据库中获取他的汉字拼音,而对于一般的数据,我们怎么实现A-Z的排序,我们需要将汉字转换成拼音就行了,接下来就带大家实现一般数据的A-Z排序功能,首先先看下效果图 上面是一个带删除按钮的EditText,我们在输入框中输入可以自动过滤出我们想要的东西,当输入框中没有数据自动替换到原来的数据列表,然后下面一个ListView用来显示数据列表,右侧是一个字母索引表,当我们点击不同的字母,ListView会定位到该字母地方,了解了布局之后,我们先看下项目结构吧 ![](http://img.blog.csdn.net/20131013204932718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhYW5taW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 我按照项目中类的顺序来一一介绍其功能 1.SortModel 一个实体类,里面一个是ListView的name,另一个就是显示的name拼音的首字母 <div class="dp-highlighter bg_java" style="color: #000000;"> <div class="bar"> <div class="tools" style="color: silver;"> **[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/12684155#)[copy](http://blog.csdn.net/xiaanming/article/details/12684155#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/111689)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/111689/fork) <div> </div> </div> </div> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.example.sortlistview; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> SortModel { </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> String name; <span class="comment" style="color: #008200;">//显示的数据</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> String sortLetters; <span class="comment" style="color: #008200;">//显示数据拼音的首字母</span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String getName() { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> name; </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> setName(String name) { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.name = name; </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String getSortLetters() { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> sortLetters; </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> setSortLetters(String sortLetters) { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.sortLetters = sortLetters; </span> - <span style="color: black;"> } </span> - <span style="color: black;">} </span> </div> <span style="color: #000000;"> 2.SideBar类就是ListView右侧的字母索引View,我们需要使用setTextView(TextView mTextDialog)来设置用来显示当前按下的字母的TextView,以及使用setOnTouchingLetterChangedListener方法来设置回调接口,在回调方法onTouchingLetterChanged(String s)中来处理不同的操作 ...

2014年6月10日 · 37 分钟 · 天边的星星

eclipse 中安装 maven 插件 ,建立maven工程

** 一、插件安装:** 1、下载maven插件 打开eclipse ,help-install new software add name : m2e url: http://download.eclipse.org/technology/m2e/releases/ (今天是2014-2-26,这个地址是有效的,以后不知道是否有效) name : m2e url: http://rgladwell.github.com/m2e-android/updates (2014-4-16,这个地址是有效的,以后不知道是否有效) 2、下载 maven-bin 下载地址 http://download.csdn.net/download/cyw8998/6963959 3、 下载下来之后,解压,找个路径放进去, 把bin的位置,设在环境变量里 新建环境变量MAVEN_HOME , PATH里配置解压后的bin路径 检查一下 进入cmd,运行mvn -v,如果显示出版本号,说明配置成功了。 4、 为了使得Eclipse中安装的Maven插件,同windows中安装的那个相同,需要让eclipse中的maven重新定位一下 Window -> Preference -> Maven -> Installation -> Add 现在就可以建立maven工程了。 二、建立工程: **方法A: ** 1、打开eclipse,通过工具new project出现如下窗口: 2、选中Maven Project, 点击Next,然后保持默认选项,再点击next,弹出如下窗口 3、在过滤器中输入android,如果你已经有这样的插件,将会显示出来,否则就需要通过Add Archetype按钮进行添加 4、 3-1、因为我之前已经安装了这三个插件,因此输入过滤器后直接就有了,如果系统没有找到android-quickstart插件,则需点击Add Archetype,弹出如下窗口,然后将所需要的插件的groupid,artifactid及版本号输入进去,根据准备工作中提及,分别是: de.akquinet.android.archetypes android-quickstart 1.0.6 如下图所示: 4、点击OK后,系统会去寻找相关的插件,然后选中此插件,再次点击Next,依次填入新工程的groupid, artifactid, package,如下图所示: 方法B: ...

2014年6月6日 · 1 分钟 · 天边的星星

Android判断正在运行的服务

public boolean isServiceRun(Context context){ ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE); List list = am.getRunningServices(30); for(RunningServiceInfo info : list){ if(info.service.getClassName.equals(“service的全称(一般为包名+service类的名称)”)){ return true; } } return false;}

2014年5月27日 · 1 分钟 · 天边的星星

Using Custom Compound Views in Android

On a recent client app, I ran into a situation where I needed an arbitrary number of EditText fields based on a selected value, where the user could enter people’s information. My initial thought was to put this logic in my Fragment, just adding EditTexts to a LinearLayout container as the selected value changes, but that bloated my Fragment, and didn’t allow for much reuse. ![](http://ryanharter.com/images/posts/compound_views/compound_friend_view.png) This was a perfect opportunity to encapsulate this interaction functionality in a custom view, which would be reusable throughout the app (required in two places so far), and would allow me to easily test the encapsulated functionality. # What Are Custom Compound Views The Android framework provides many Views and Layouts, but sometimes developers need to create their own. Sometimes these are extensions of the built in class to add functionality, like supporting custom fonts and letter spacing in TextViews. Other times these are simply because a built in view doesn’t exist for the desired functionality, like radial dials. What I’m talking about are custom compound views, views that are made up of multiple other views, whether those are builtin or custom, to encapsulate complex interaction and functionality. I use compound views in cases where a full fledged Fragment is more than I need, but I want reusable, testable components. The example I explained above is a great example of that. Since the code for that was for a client project, I’ve created a simple project to demonstrate creating and using custom compound views available [here](https://github.com/rharter/CompoundViews). # The Custom View In this example, we want a custom view that adds EditTexts so that the user can enter data for an arbitrary number of items. In a custom view, this can easily be done with a simple container view (LinearLayout) that sets the appropriate number of EditTexts, and allows you to easily fetch a list of names. Here’s the code: <div class="highlight" style="font-weight: inherit; font-style: inherit;"> <table style="font-weight: inherit; font-style: inherit;"> <tr style="font-weight: inherit; font-style: inherit;"> <td class="gutter" style="font-style: inherit;"> ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 ...

2014年5月20日 · 14 分钟 · 天边的星星

websocket开发第一篇

客户端与服务端基于HTTP和WebSocket网络协议来通讯,其中HTTP用于从客户端向服务端的请求,WebSocket用于从服务端向客户端的推送,因此服务器端需要支持HTTP和WebSocket两种协议。HTTP好说,所有Web服务器都支持,而支持WebSocket的倒不多。 Java阵营:Tomcat 7和Netty .Net阵营:System.Net.WebSockets Nodejs阵营:Socket.io WebSocket百度百科 1)Web通信的演进 2)WebSocket 3)WebSocket在Apache Tomcat 7(7.0.27 )的实现 4)怎样用Jaggery开发WebSocket特性 Tomcat 7中引入了WebSocket实现。下面我们先了解WebSocket的优缺点,其次简要介绍Apache Tomcat 7的WebSocket实现。 WebSocket的演进过程如图所示: 要知道在Tomcat 6中要实现双向HTTP通信,需要使用Tomcat的Comet处理模块。Comet有以下局限: 1)HTTP协议本身是请求/响应协议,而不是双向协议 2)代理和其它中间媒介不会工作的很好 3)在任何给定的时间只有某个方向的数据包传输 4)Servlet开发者要使用多线程很难 Servlet 3.0版引入了一个新特征:异步Servlet。我们把它与客户端的Ajax调用进行比较。异步Servlet会把请求悬挂起,直到响应准备好交付,无需在容器中使用worker线程。WebSockets是另一个尝试标准化的技术,它支持HTTP之上的异步、事件驱动和全双工通信。 WebSocket给我们带来了如下特性: 1)通过升级/交换HTTP协议,在HTTP之上提供全双工通信 2)基于消息/帧的通信 3)可以与代理和中间媒介一起工作 4)还可以不与代理和中间媒介一起工作 WebSocket的优点: 1)WebSocket是理想的,客户端和服务器之间不再需要长期运行的会话 2)WebSocket是HTTP协议之上的全双工通信 3)由于WebSocket是HTTP握手初始化之后的TCP之上的协议,所以你只需做两件事: 发送消息 接收消息

2014年5月20日 · 1 分钟 · 天边的星星