在Android實作HTML TextView與AutoLink使用的建議方式

Android的TextView除了可以用來顯示文字資料之外,還可以使用HTML語法來調整文字的樣式和文字超連結,無需特地去使用WebView。只是一旦使用TextView製作超連結,該TextView就會變得難以控制,因此有幾個特性應該是設計師必須事先知道的。 TextView顯示HTML 要使用TextView顯示HTML的作法很簡單,只要用以下方式來setText即可。 ``` textView.setText(Html.fromHtml("HTML語法字串")); ``` 例如: ``` textView.setText(Html.fromHtml("歡迎大家來到<big><font color=\"#FF0000\"><b>MagicLen</b></font></big>,本站網址如下:<br/><br/><a href=\"http://magiclen.org/\">http://magiclen.org/</a>")); ``` 結果如下: ...

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

Android 上的 HttpClient 的 Cookie 存取策略

`BasicHttpParams params = ``new` `BasicHttpParams();` `// Set the timeout in milliseconds until a connection is established. ` `HttpConnectionParams.setConnectionTimeout(params, TIMEOUT_CONNECTION);` `// Set the default socket timeout (SO_TIMEOUT) ` `// in milliseconds which is the timeout for waiting for data. ` `HttpConnectionParams.setSoTimeout(params, TIMEOUT_SOCKET); ` `ConnManagerParams.setMaxTotalConnections(params, ``5``);` `ConnManagerParams.setTimeout(params, TIMEOUT_TOTAL);` `client = ``new` `DefaultHttpClient(params);` `CookieStore cookieStore = ``new` `BasicCookieStore();` `//Bind custom cookie store to the local context` `client.setCookieStore(cookieStore);` `CookieSpecFactory csf = ``new` `CookieSpecFactory() { ` `public` `CookieSpec newInstance(HttpParams params) {` ` ``return` `new` `BrowserCompatSpec() {` ` ``@Override` ` ``public` `void` `validate(Cookie cookie, CookieOrigin origin) ``throws` `MalformedCookieException ` ` ``{` ` ``// Oh, I am easy` ` ``// allow all cookies` ` ``//log.debug("custom validate");` ` ``}` ` ``};` `}` `};` `client.getCookieSpecs().register(``"oschina"``, csf);` `client.getParams().setParameter(ClientPNames.COOKIE_POLICY, ``"oschina"``);` `client.getParams().setParameter(CookieSpecPNames.SINGLE_COOKIE_HEADER, ``true``);` 当然下面设置也可以,直接运行下就能看到结果。。 /** * <span class="s1">@param</span> url * :交互服务器的URL地址 * <span class="s1">@param</span> pairs * :交互所带的参数 * <span class="s1">@return</span> JSONObject:从服务器获取的字符串 */ <span class="s2">public</span> <span class="s2">static</span> String httpServicePostString(String url, List<BasicNameValuePair> pairs, Context context) { HttpPost httpPost = <span class="s2">new</span> HttpPost(url); DefaultHttpClient httpClient = <span class="s2">new</span> DefaultHttpClient(); Log.d(<span class="s3">&#8220;cat&#8221;</span>, <span class="s3">&#8220;out response=&#8221;</span> + httpPost.getURI() + <span class="s3">&#8221; &#8220;</span> + pairs.toString()); <span class="s2">try</span> { httpPost.setEntity(<span class="s2">new</span> UrlEncodedFormEntity(pairs, HTTP.<span class="s4">UTF_8</span>)); } <span class="s2">catch</span> (UnsupportedEncodingException e) { e.printStackTrace(); } CookieStore cookieStore = <span class="s2">new</span> BasicCookieStore(); httpClient.setCookieStore(cookieStore); <span class="s2">try</span> { HttpResponse response = httpClient.execute(httpPost); <span class="s2">if</span> (response.getStatusLine().getStatusCode() == HttpStatus.<span class="s4">SC_OK</span>) { HttpEntity httpEntity = response.getEntity(); <span class="s2">if</span> (httpEntity != <span class="s2">null</span>) { CookieStore c = httpClient.getCookieStore(); List<Cookie> list = c.getCookies(); <span class="s2">for</span> (Cookie cookie : list) { Log.e(HttpService.<span class="s2">class</span>.getName(), <span class="s3">&#8220;cookie=&#8221;</span> + cookie.getName()); Log.e(HttpService.<span class="s2">class</span>.getName(), Log.e(HttpService.<span class="s2">class</span>.getName(), SharedPreferencesUtils sharePrefenrences = <span class="s2">new</span> SharedPreferencesUtils(); sharePrefenrences.saveCookie(context, cookie.getValue()); } Header[] headers = response.getAllHeaders(); <span class="s2">for</span> (Header header : headers) { Log.e(HttpService.<span class="s2">class</span>.getName(), <span class="s3">&#8220;head=&#8221;</span> + header.getName()); } <span class="s2">if</span> (response.getFirstHeader(<span class="s3">&#8220;Set-Cookie&#8221;</span>) != <span class="s2">null</span>) { String set_cookie = response.getFirstHeader( <span class="s3">&#8220;Set-Cookie&#8221;</span>).getValue(); Log.e(HttpService.<span class="s2">class</span>.getName(), <span class="s3">&#8220;set_cookie=&#8221;</span> + set_cookie); SharedPreferencesUtils sharePrefenrences = <span class="s2">new</span> SharedPreferencesUtils(); sharePrefenrences.saveCookie(context, set_cookie); } InputStream inputStream = httpEntity.getContent(); BufferedReader bufferReader = <span class="s2">new</span> BufferedReader( <span class="s2">new</span> InputStreamReader(inputStream), <span class="s4">i</span>); String returnStr = <span class="s3">&#8220;&#8221;</span>; String readLine = <span class="s2">null</span>; <span class="s2">while</span> ((readLine = bufferReader.readLine()) != <span class="s2">null</span>) { returnStr = returnStr + readLine; } inputStream.close(); bufferReader.close(); Log.d(<span class="s3">&#8220;cat&#8221;</span>, <span class="s3">&#8220;returnStr=&#8221;</span> + returnStr); <span class="s2">return</span> returnStr; } } } <span class="s2">catch</span> (ClientProtocolException e) { e.printStackTrace(); returnnull<span class="s5">;</span> } <span class="s2">catch</span> (IOException e) { e.printStackTrace(); returnnull<span class="s5">;</span> } returnnull<span class="s5">;</span> }

2014年11月23日 · 2 分钟 · 天边的星星

Android获得手机所有应用(非系统)、正在运行的Service和Activity

Android中获得系统运行的进程、获得当前正在运行的service、 获得当前正在运行的activity、 获得最近运行的应用、获取手机内所有应用(非系统应用) 直接上代码,布局文件就是一个TextView 直接创建Activity后删除Activity中所有内容,复制下面代码直接就能运行 private TextView txtDes = null; @Override protected void onCreate(Bundle savedInstanceState) { // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 强制为横屏 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtDes = (TextView) findViewById(R.id.textdes); } @Override protected void onResume() { super.onResume(); Log.w(“sss”, “onResume”); StringBuffer str = new StringBuffer(); List listData = getAllApps(this); str.append(“应用数量:” + listData.size()); str.append(“\n”); for (PackageInfo packageInfo : listData) { str.append(“” + packageInfo.packageName); str.append(“\n”); str.append(“” packageInfo.applicationInfo .loadLabel(getPackageManager())); str.append(“\n”); ActivityInfo[] list; try { list = getPackageManager().getPackageInfo( packageInfo.packageName, PackageManager.GET_ACTIVITIES).activities; if (list != null) { str.append(“Activity数量:” + list.length); str.append(“\n”); for (ActivityInfo activityInfo : list) { str.append(activityInfo.packageName); str.append(“\n”); str.append(activityInfo.name); str.append(“\n”); str.append(“activityInfo.screenOrientation=” activityInfo.screenOrientation); str.append(“\n”); str.append(“activityInfo.configChanges=” activityInfo.configChanges); str.append(“\n”); } } } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } txtDes.setText(str); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); StringBuffer str = new StringBuffer(); List listData = getAllApps(this); str.append(“应用数量:” + listData.size()); str.append(“\n”); for (PackageInfo packageInfo : listData) { str.append(“” + packageInfo.packageName); str.append(“\n”); str.append(“” ...

2014年11月21日 · 2 分钟 · 天边的星星

Android 网络编程之—HttpClient 与 HttpURLConnection 共用cookie

HttpClient 与 HttpURLConnection 共用 SessionId HttpClient 与 HttpUrlConnection 是Android 中HTTP操作最常见的访问方式。在一个应用程序中有时候会用到这两种方式,如何能让他们共用Cookie,让客户端访问服务器保持Session进行通信。 针对httpClient 和HttpUrlConnection 获取和发送Cookie,主要是sessionID的共享。 httpClient获取及发送Session 值: **[java]** [view plain](http://blog.csdn.net/jmq_0000/article/details/24921983#)[copy](http://blog.csdn.net/jmq_0000/article/details/24921983#)[print](http://blog.csdn.net/jmq_0000/article/details/24921983#)[?](http://blog.csdn.net/jmq_0000/article/details/24921983#) <div> </div> </div> - <span style="color: #ffffff;"> </span> - <span style="color: #ffffff;"> </span> - <span style="color: #ffffff;"> HttpPost httpPost = <span class="keyword" style="font-weight: bold; color: #00cc00;">new</span> HttpPost(url); </span> - <span style="color: #ffffff;"> </span> - <span style="color: #ffffff;"> <span class="comment" style="color: #cccccc;">// 将SessionId发给服务器</span> </span> - <span style="color: #ffffff;"> <span class="keyword" style="font-weight: bold; color: #00cc00;">if</span>(<span class="keyword" style="font-weight: bold; color: #00cc00;">null</span> != mSESSIONID){ </span> - <span style="color: #ffffff;"> httpPost.setHeader(<span class="string" style="color: #ff9900;">&#8220;Cookie&#8221;</span>, <span class="string" style="color: #ff9900;">&#8220;SESSIONID=&#8221;</span> + mSESSIONID); </span> - <span style="color: #ffffff;"> } </span> - <span style="color: #ffffff;"> </span> - <span style="color: #ffffff;"> DefaultHttpClient httpClient = <span class="keyword" style="font-weight: bold; color: #00cc00;">new</span> DefaultHttpClient(); </span> - <span style="color: #ffffff;"> httpResponse = httpClient.execute(httpPost); </span> - <span style="color: #ffffff;"> <span class="keyword" style="font-weight: bold; color: #00cc00;">if</span> (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { </span> - <span style="color: #ffffff;"> HttpEntity entity = httpResponse.getEntity(); </span> - <span style="color: #ffffff;"> </span> - <span style="color: #ffffff;"> CookieStore mCookieStore = httpClient.getCookieStore(); </span> - <span style="color: #ffffff;"> List<Cookie> cookies = mCookieStore.getCookies(); </span> - <span style="color: #ffffff;"> <span class="comment" style="color: #cccccc;">//这里是读取指定Cookie 的值</span> </span> - <span style="color: #ffffff;"> <span class="keyword" style="font-weight: bold; color: #00cc00;">for</span> (<span class="keyword" style="font-weight: bold; color: #00cc00;">int</span> i = <span class="number" style="color: #c00000;"></span>; i < cookies.size(); i++) { </span> - <span style="color: #ffffff;"> <span class="keyword" style="font-weight: bold; color: #00cc00;">if</span> (<span class="string" style="color: #ff9900;">&#8220;SESSIONID&#8221;</span>.equals(cookies.get(i).getName())) { </span> - <span style="color: #ffffff;"> mSESSIONID = cookies.get(i).getValue(); </span> - <span style="color: #ffffff;"> <span class="keyword" style="font-weight: bold; color: #00cc00;">break</span>; </span> - <span style="color: #ffffff;"> } </span> - <span style="color: #ffffff;"> </span> - <span style="color: #ffffff;"> } </span> - <span style="color: #ffffff;">} </span> 在程序中保存上面的sessionId ,或用全局变量,或者SharedPreferences 保存,看这个sessionId 的会话时间及程序业务。 ...

2014年11月21日 · 3 分钟 · 天边的星星

Android有趣的全透明效果–Activity及Dialog的全透明(附android系统自带图标大全)

1.Activity全透明 同学zzm给了这个有趣的代码,现在公布出来。 先在res/values下建colors.xml文件,写入:** **** ** [?](http://www.oschina.net/question/54100_30266#) <table style="font-weight: normal !important;" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter" style="color: #afafaf !important;"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `&lt;? ``xml` `version` `= ``"1.0"` `encoding` `= ``"UTF-8"` `?&gt; ` </div> <div class="line number2 index1 alt1"> `&lt;``resources``&gt; ` </div> <div class="line number3 index2 alt2"> ` ``&lt;``color` `name` `= ``"transparent"``&gt; #9000 &lt;/``color``&gt; ` </div> <div class="line number4 index3 alt1"> `&lt;/``resources``&gt;` </div> </div> </td> </tr> </table> ...

2014年11月19日 · 9 分钟 · 天边的星星

GridView+Viewpage实现一切上下滑动

一个布局。。上面是一个自动播放的ViewPager,,下面是一个GridView。。 怎么实现ViewPager和GridView一起上下滑动,,而不是向上滑动时,,ViewPager会覆盖GridView。 重写gridview 和 ScrollView public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE » 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } } —————————————————————————————————– public class MyScrollView extends ScrollView { // 滑动距离及坐标 private float xDistance, yDistance, xLast, yLast; public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } ...

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

Android开发实践:自定义带消息循环(Looper)的工作线程

Android也提供了封装有消息循环(Looper)的HandlerThread类,这种线程,可以绑定Handler()对象,并通过 Handler的sendMessage()函数向线程发送消息,通过handleMessage()函数,处理线程接收到的消息。这么说比较抽象,那 么,本文就利用基础的Java类库,实现一个带消息循环(Looper)的线程,以帮助初学者理解这样一个Looper到底是怎么工作的。 1. 首先,我们完成一个简单的线程框架。 1 <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> <div class="line number26 index25 alt1"> 26 </div> <div class="line number27 index26 alt2"> 27 </div> <div class="line number28 index27 alt1"> 28 </div> <div class="line number29 index28 alt2"> 29 </div> <div class="line number30 index29 alt1"> 30 </div> <div class="line number31 index30 alt2"> 31 </div> <div class="line number32 index31 alt1"> 32 </div> <div class="line number33 index32 alt2"> 33 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `public` `class` `LooperThread {` </div> <div class="line number2 index1 alt1"> ` ` </div> <div class="line number3 index2 alt2"> ` ``private` `volatile` `boolean` `mIsLooperQuit = ``false``;` </div> <div class="line number4 index3 alt1"> ` ` </div> <div class="line number5 index4 alt2"> ` ``private` `Thread mThread; ` </div> <div class="line number6 index5 alt1"> ` ` </div> <div class="line number7 index6 alt2"> ` ``public` `void` `start() { ` </div> <div class="line number8 index7 alt1"> ` ``if``( mThread != ``null` `) {` </div> <div class="line number9 index8 alt2"> ` ``return``;` </div> <div class="line number10 index9 alt1"> ` ``} ` </div> <div class="line number11 index10 alt2"> ` ``mIsLooperQuit = ``false``;` </div> <div class="line number12 index11 alt1"> ` ``mThread = ``new` `Thread(mLooperRunnable);` </div> <div class="line number13 index12 alt2"> ` ``mThread.start(); ` </div> <div class="line number14 index13 alt1"> ` ``}` </div> <div class="line number15 index14 alt2"> ` ` </div> <div class="line number16 index15 alt1"> ` ``public` `void` `stop() { ` </div> <div class="line number17 index16 alt2"> ` ``if``( mThread == ``null` `) {` </div> <div class="line number18 index17 alt1"> ` ``return``;` </div> <div class="line number19 index18 alt2"> ` ``} ` </div> <div class="line number20 index19 alt1"> ` ``mIsLooperQuit = ``true``;` </div> <div class="line number21 index20 alt2"> ` ``mThread = ``null``; ` </div> <div class="line number22 index21 alt1"> ` ``}` </div> <div class="line number23 index22 alt2"> </div> <div class="line number24 index23 alt1"> ` ``protected` `Runnable mLooperRunnable = ``new` `Runnable() { ` </div> <div class="line number25 index24 alt2"> </div> <div class="line number26 index25 alt1"> ` ``@Override` </div> <div class="line number27 index26 alt2"> ` ``public` `void` `run() {` </div> <div class="line number28 index27 alt1"> ` ``while``( !mIsLooperQuit ) {` </div> <div class="line number29 index28 alt2"> ` ` </div> <div class="line number30 index29 alt1"> ` ``}` </div> <div class="line number31 index30 alt2"> ` ``}` </div> <div class="line number32 index31 alt1"> ` ``}; ` </div> <div class="line number33 index32 alt2"> `}` </div> </div> </td> </tr> </table> ...

2014年11月17日 · 9 分钟 · 天边的星星

ym——安卓巴士总结了近百个Android优秀开源项

1、Android团队提供的示例项目 如果不是从学习Android SDK中提供的那些样例代码开始,可能没有更好的方法来掌握在Android这个框架上开发。由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏、图像处理、时间显示、开始菜单快捷方式等。 地址:http://www.apkbus.com/android-13506-1-1.html 2、Remote Droid RemoteDroid是一个Android应用,能够让用户使用自己的无线网络使用无线键盘、触摸屏操作手机。这个项目为开发者提供了如网络连接、触摸屏手指运动等很好的样例。 地址:http://www.apkbus.com/android-13507-1-1.html 3、TorProxy和Shadow TorProxy应用实现了Android手机无线电电传通讯(TOR),和Shadow应用一起使用,可以使用手机匿名上网。从该项目源代码中,可以掌握socket连接、管理cookie等方法。 地址:http://www.apkbus.com/android-13510-1-1.html 4、Android SMSPopup SMSPopup可以截获短信内容显示在一个泡泡形状的窗口中。从这个项目中可以掌握到如何使用内置的短信SMS接口。 地址:http://www.apkbus.com/android-13513-1-1.html 5、Standup Timer Standup Timer应用用于控制站立会议时间,类似秒表倒计时,可以提醒每个人的讲话时间已到,从而保证每个与会者使用时间一样。从该项目的代码中,可以学会如何使用时间函数。另外,这个项目的代码是采用视图view、模型model严格分离的设计思路。 地址:http://www.apkbus.com/android-13514-1-1.html 6、Foursquare 是Foursquare.com的一个客户端应用,该应用主要分为两个模块:API(com.joelapenna.foursquare)和界面前端(com.joelapenna.foursquared)两部分。从该项目代码中,可以学会如何同步、多线程、HTTP连接等技术。 地址:http://www.apkbus.com/android-13516-1-1.html 7、Pedometer Pedometer应用用于记录你每天走路步数的。尽管记录不一定精准,但是从这个项目中,可以学习几个不同的技术:加速器交互、语音更新、后台运行服务等。 地址:http://www.apkbus.com/android-13515-1-1.html 8、OpenSudoku-android OpenSudoku是一个简单的九宫格数独游戏。从代码中可以学习到如何在视图中显示表格数据,以及如何和一个网站交互等技术。 地址:http://www.apkbus.com/android-13517-1-1.html 9、ConnectBot ConnectBot是Android平台的一个客户端安全壳应用。从该项目代码中,可以学习到很多Android安全方面的内容,这些是你在开发应用时经常需要考虑的安全问题。 地址:http://www.apkbus.com/android-13518-1-1.html 10、WordPress的Android应用 当然在最后不能不提WordPress的Android应用了,这是WordPress官方开发团队提供的一个项目。从代码中可以学习到XMLRPC调用(当然还有更多的优秀内容)。 地址:http://www.apkbus.com/android-13520-1-1.html Android PDF 阅读器 http://sourceforge.net/projects/andpdf/files/ 个人记账工具 OnMyMeans http://sourceforge.net/projects/onmymeans/develop Android电池监控 Android Battery Dog [http://sourceforge.net/projects/andbatdog/](http://sourceforge.net/projects/andbatdog/) RSS阅读软件 Android RSS [http://code.google.com/p/android-rss/](http://code.google.com/p/android-rss/) Android的PDF阅读器 DroidReader [http://code.google.com/p/droidreader/](http://code.google.com/p/droidreader/) AndroidScripting Environment [http://code.google.com/p/android-scripting/](http://code.google.com/p/android-scripting/) Android小游戏 Android Shapes [http://sourceforge.net/projects/shapes/](http://sourceforge.net/projects/shapes/) AndroidJSON RPC [http://code.google.com/p/android-json-rpc/](http://code.google.com/p/android-json-rpc/) AndroidVNC [http://code.google.com/p/android-vnc/](http://code.google.com/p/android-vnc/) 魅族M8的Android移植 M8 Android [http://code.google.com/p/m8-android-kernel/](http://code.google.com/p/m8-android-kernel/) Android游戏 Amazed [http://code.google.com/p/apps-for-android/](http://code.google.com/p/apps-for-android/) Android的社交网络 HelloWorld goes mobile [http://sourceforge.net/projects/helloworldgm/](http://sourceforge.net/projects/helloworldgm/) 手机聊天程序 Android jChat [http://code.google.com/p/jchat4android/](http://code.google.com/p/jchat4android/) Android的GPS轨迹记录 MyTracks [http://code.google.com/p/mytracks/](http://code.google.com/p/mytracks/) Android国际象棋游戏 Honzovy achy [http://sourceforge.net/projects/honzovysachy/](http://sourceforge.net/projects/honzovysachy/) Android旅行记录软件 AndTripLog [http://sourceforge.net/projects/andtriplog/](http://sourceforge.net/projects/andtriplog/) 音乐播放器 Ambient [http://sourceforge.net/projects/ambientmp/](http://sourceforge.net/projects/ambientmp/) Android的邮件客户端 K9mail [http://code.google.com/p/k9mail/](http://code.google.com/p/k9mail/) 多平台应用开发库 QuickConnect [http://sourceforge.net/projects/quickconnect/](http://sourceforge.net/projects/quickconnect/) gPhone手机空战游戏 [http://code.google.com/p/wireless-apps/](http://code.google.com/p/wireless-apps/) Android照片小软件 Panoramio [http://code.google.com/p/apps-for-android/](http://code.google.com/p/apps-for-android/) i-jetty [http://code.google.com/p/i-jetty/](http://code.google.com/p/i-jetty/) Android小游戏 DivideAndConquer [http://code.google.com/p/apps-for-android/](http://code.google.com/p/apps-for-android/) Android全球时间 AndroidGlobalTime [http://code.google.com/p/apps-for-android/](http://code.google.com/p/apps-for-android/) Android2D游戏引擎 Android Angle [http://code.google.com/p/angle/](http://code.google.com/p/angle/) AndroidRuby [http://code.google.com/p/android-ruby/](http://code.google.com/p/android-ruby/) Android-N810 [http://sourceforge.net/projects/android-n810/](http://sourceforge.net/projects/android-n810/) Android的短信应用 Ecclesia [http://sourceforge.net/projects/ecclesia](http://sourceforge.net/projects/ecclesia) Android平台上的JXTA客户端 Peerdroid [http://code.google.com/p/peerdroid/](http://code.google.com/p/peerdroid/) Android游戏引擎 libgdx [http://code.google.com/p/libgdx/](http://code.google.com/p/libgdx/) Android照片小软件 Photostream [http://code.google.com/p/apps-for-android/](http://code.google.com/p/apps-for-android/) Alien3dlogo Android 3D游戏引擎 Alien3d [http://code.google.com/p/alien3d/](http://code.google.com/p/alien3d/) WinampRemote Android Server [http://sourceforge.net/projects/winampdroid](http://sourceforge.net/projects/winampdroid) Android的Facebook客户端 Andrico [http://code.google.com/p/andrico/](http://code.google.com/p/andrico/) AndroidApplications Manager [http://sourceforge.net/projects/aam/](http://sourceforge.net/projects/aam/) Java3D图形引擎 Catcake [http://code.google.com/p/catcake/](http://code.google.com/p/catcake/) android-gcc-objc2-0 [http://code.google.com/p/android-gcc-objc2-0/](http://code.google.com/p/android-gcc-objc2-0/) 九宫格数独游戏 OpenSudoku [http://code.google.com/p/opensudoku-android/](http://code.google.com/p/opensudoku-android/) Android铃声扩展工具 RingsExtended [http://code.google.com/p/apps-for-android/](http://code.google.com/p/apps-for-android/) JavaEyeAndroid client [http://code.google.com/p/javaeye-android-client/](http://code.google.com/p/javaeye-android-client/) RemoteDroid [http://code.google.com/p/remotedroid/](http://code.google.com/p/remotedroid/) Android小游戏 Clickin2DaBeat [http://code.google.com/p/apps-for-android/](http://code.google.com/p/apps-for-android/) 中医大夫助理信息系统 zz-doctor [http://code.google.com/p/zz-doctor/](http://code.google.com/p/zz-doctor/) FacebookConnect for Android [http://code.google.com/p/fbconnect-android/](http://code.google.com/p/fbconnect-android/) AndroidSMSPopup [http://code.google.com/p/android-smspopup/](http://code.google.com/p/android-smspopup/) FreeTTS-Android [http://sourceforge.net/projects/freettsandroidi](http://sourceforge.net/projects/freettsandroidi) Foursquare.com的客户端 Foursquar [http://code.google.com/p/foursquared/](http://code.google.com/p/foursquared/) 条形码扫描仪 Android PC_BCR [http://code.google.com/p/android-pcbcr/](http://code.google.com/p/android-pcbcr/) android天气预报源码[http://www.apkbus.com/android-2240-1-1.html](http://www.apkbus.com/android-2240-1-1.html) android源码之电影购票源码[http://www.apkbus.com/android-2506-1-1.html](http://www.apkbus.com/android-2506-1-1.html) android的基站、WIFI、GPS定位集合,源码下载[。](http://www.apkbus.com/android-15281-1-1.html):[http://www.apkbus.com/android-15281-1-1.html](http://www.apkbus.com/android-15281-1-1.html) 一个100行代码写的android计算器:[http://www.apkbus.com/android-2231-1-1.html](http://www.apkbus.com/android-2231-1-1.html) Android卷曲翻页效果Demo:[http://www.apkbus.com/android-3738-1-2.html](http://www.apkbus.com/android-3738-1-2.html) android文件浏览器代码:[http://www.apkbus.com/android-2242-1-2.html](http://www.apkbus.com/android-2242-1-2.html) android源码超炫的3D特效程序管理功能:[http://www.apkbus.com/android-2046-1-2.html](http://www.apkbus.com/android-2046-1-2.html) Android手机平台重力感应Demo :[http://www.apkbus.com/android-45-1-2.html](http://www.apkbus.com/android-45-1-2.html) 一个android阅读器的源码[CoolReader](http://www.apkbus.com/android-2078-1-1.html):[http://www.apkbus.com/android-2078-1-2.html](http://www.apkbus.com/android-2078-1-2.html) 国外开源android音乐播放器[http://www.apkbus.com/android-2072-1-2.html](http://www.apkbus.com/android-2072-1-2.html) 一个综合了各个类型的对话框的demo :[http://www.apkbus.com/android-2086-1-2.html](http://www.apkbus.com/android-2086-1-2.html) 分享27个各种类型的demo:[http://www.apkbus.com/android-2083-1-2.html](http://www.apkbus.com/android-2083-1-2.html) android bluetooth [安卓](http://www.apkbus.com/)蓝牙源码下载:[http://www.apkbus.com/android-16841-1-2.html](http://www.apkbus.com/android-16841-1-2.html) android豆瓣手机客户端源码:[http://www.apkbus.com/android-1495-1-3.html](http://www.apkbus.com/android-1495-1-3.html) 转自:http://blog.csdn.net/cym492224103/article/details/38469251

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

Android开发实践:自定义带动画的View

对于一个自定义View来说,onMeasure只是用来计算View尺寸,onDraw()才是真正执行View的绘制,所以一般我们都需要重写 onDraw()函数来绘制我们期望的UI界面。下面我以一个具体的例子探索自定义View的onDraw()的实现过程和关键点。 我们的目标是制作一个柱状图动画,View的动画启动后,会显示一排柱状图增长的画面,这种动画多用于财务类或者统计类的APP中,效果如图所示(截屏的格式转换过程导致有些变形,还好不影响演示,图中设置了反复播放,真机上只会播放一次): 1. 首先,自定义View的派生类 ** ** 1 <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `public` `class` `AnimatorView ``extends` `View {` </div> <div class="line number2 index1 alt1"> </div> <div class="line number3 index2 alt2"> ` ``private` `Paint mPaint; ` </div> <div class="line number4 index3 alt1"> ` ` </div> <div class="line number5 index4 alt2"> ` ``public` `AnimatorView(Context context) {` </div> <div class="line number6 index5 alt1"> ` ``super``(context); ` </div> <div class="line number7 index6 alt2"> ` ``initialize();` </div> <div class="line number8 index7 alt1"> ` ``}` </div> <div class="line number9 index8 alt2"> </div> <div class="line number10 index9 alt1"> ` ``public` `AnimatorView(Context context, AttributeSet attrs) {` </div> <div class="line number11 index10 alt2"> ` ``super``(context, attrs);` </div> <div class="line number12 index11 alt1"> ` ``initialize();` </div> <div class="line number13 index12 alt2"> ` ``}` </div> <div class="line number14 index13 alt1"> ` ` </div> <div class="line number15 index14 alt2"> ` ``public` `AnimatorView(Context context, AttributeSet attrs, ``int` `defStyle) {` </div> <div class="line number16 index15 alt1"> ` ``super``(context, attrs, defStyle);` </div> <div class="line number17 index16 alt2"> ` ``initialize();` </div> <div class="line number18 index17 alt1"> ` ``}` </div> <div class="line number19 index18 alt2"> ` ` </div> <div class="line number20 index19 alt1"> ` ``protected` `void` `initialize() {` </div> <div class="line number21 index20 alt2"> ` ``mPaint = ``new` `Paint(); ` </div> <div class="line number22 index21 alt1"> ` ``mPaint.setAntiAlias(``true``);` </div> <div class="line number23 index22 alt2"> ` ``mPaint.setStyle(Style.FILL); ` </div> <div class="line number24 index23 alt1"> ` ``} ` </div> <div class="line number25 index24 alt2"> `}` </div> </div> </td> </tr> </table> 注: Paint是用来绘图的画笔,可以设置其样式、画面的粗细、填充模式、颜色等等。 ...

2014年11月17日 · 7 分钟 · 天边的星星

Android开发实践:为什么要继承onMeasure()

Android开发中偶尔会用到自定义View,一般情况下,自定义View都需要继承View类的onMeasure方法,那么,为什么要继承 onMeasure()函数呢?什么情况下要继承onMeasure()?系统默认的onMeasure()函数行为是怎样的 ?本文就探究探究这些问题。 首先,我们写一个自定义View,直接调用系统默认的onMeasure函数,看看会是怎样的现象: 1 <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `package` `com.titcktick.customview;` </div> <div class="line number2 index1 alt1"> </div> <div class="line number3 index2 alt2"> `import` `android.content.Context;` </div> <div class="line number4 index3 alt1"> `import` `android.util.AttributeSet;` </div> <div class="line number5 index4 alt2"> `import` `android.view.View;` </div> <div class="line number6 index5 alt1"> </div> <div class="line number7 index6 alt2"> `public` `class` `CustomView ``extends` `View {` </div> <div class="line number8 index7 alt1"> ` ` </div> <div class="line number9 index8 alt2"> ` ``public` `CustomView(Context context) {` </div> <div class="line number10 index9 alt1"> ` ``super``(context); ` </div> <div class="line number11 index10 alt2"> ` ``}` </div> <div class="line number12 index11 alt1"> </div> <div class="line number13 index12 alt2"> ` ``public` `CustomView(Context context, AttributeSet attrs) {` </div> <div class="line number14 index13 alt1"> ` ``super``(context, attrs); ` </div> <div class="line number15 index14 alt2"> ` ``}` </div> <div class="line number16 index15 alt1"> ` ` </div> <div class="line number17 index16 alt2"> ` ``@Override` </div> <div class="line number18 index17 alt1"> ` ``protected` `void` `onMeasure(``int` `widthMeasureSpec, ``int` `heightMeasureSpec) { ` </div> <div class="line number19 index18 alt2"> ` ``super``.onMeasure(widthMeasureSpec, heightMeasureSpec);` </div> <div class="line number20 index19 alt1"> ` ``}` </div> <div class="line number21 index20 alt2"> </div> <div class="line number22 index21 alt1"> `}` </div> </div> </td> </tr> </table> ...

2014年11月17日 · 7 分钟 · 天边的星星