搜尋文章

顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2013年9月3日 星期二

使用android support V7 Demo

1.引入android-support-v7-appcompat、android-support-v7-gridlayout、android-support-v7-mediarouter三個android-support-v7的library。
先點選File/New/other/Android/Android Project from Existing Code,再點選Browse選擇androidSDK資料夾裡的extras/android/support/v7/appcompat、gridlayout、mediarouter按確定(這邊要分三次做),然後把project to import裡的專案給勾選起來,還有下面的copy projects into workspace也要勾選起
來之後按finish就可以了。

2.更改library SDK Version。
在android-support-v7-appcompat專案資料夾上按右鍵點選propertices然後選擇androidSDK的版本這邊要選擇android4.0,API LEVEL14。
在android-support-v7-mediarouter專案資料夾上按右鍵點選propertices然後選擇androidSDK的版本這邊要選擇android4.2,API LEVEL17,之後在下面Library的地方點選add然後選擇android-support-v7-appcompat再按OK。

3.加入android support V7 Demo。
先點選File/New/other/Android/Android Sample Project,之後選擇android4.1(Min SDK 7、Target SDK 17)然後選擇Support7Demos[Android Support Library]然後再按finish加入專案。

4.為support V7 Demo加入support V7 Library。
一樣在Support7Demos的資料夾上按右鍵點選propertices,然後再Library的地方按add加入第一個步驟引入的android-support-v7-appcompat、android-support-v7-gridlayout、android-support-v7-mediarouter這三個Library就可以發佈了。


2013年8月27日 星期二

AS3 Rect & java Rect 傻傻分不清~

今天在看android用canves畫圖案,有用到drawRect跟drawRoundRect這兩個方法,一個是畫矩形的另一個也是畫矩形的不過可以再多畫圓角。
這兩個方法都要帶一個Rect進去,想說Rect這東西在AS3的時候就用過很多次了,就覺得這四個值分別是帶x、y、width、height,然後就這樣帶進去了,想當然是畫出很奇怪的型狀或是根本沒圖形。在試驗很多次之後才發現原來AS3的Rect跟java的Rect是不一樣的阿~~

AS3裡如果是帶Rect(100,100,200,200)的值的話,會在x 100,y 100的地方畫一個寬200高200的矩形,不過在java裡這四個值分別是起始點與結束點,前面兩個值是起始點,後面兩個值是結束點,所以跟上面一樣帶Rect(100,100,200,200)的值的話,其實畫出來的會是在x 100,y 100的地方畫一個寬100高100得值,因為第三個值-第一個值=寬,第四個值-第二個值=高。

結案 !

2013年6月12日 星期三

android-透過webView加上userAgent


在用userAgent判斷使用者是電腦或是行動裝置觀看網頁這一篇

記錄了如何用navigator.userAgent去判斷是在行動裝置上觀看網頁還是用電腦看

但如果是要在android上判斷是在行動裝置上的瀏覽器看還是用應用程式裡面的webView看的話

就需要再webView上下一點工夫了

下面直接上code

WebVIew mWebView = new WebView(context);
//先用webview的getSettings()取得webSettings再用getUserAgentString()
//取得userAgent,這邊取出來的值會跟在網頁用js的navigator.userAgent取的
//值是一樣的
String userAgentStr = mWebView.getSettings().getUserAgentString();
//之後用setUserAgentString()設定新的userAgent
//這邊設定新的UserAgent的時候用記得用舊的UserAgent去加入新的字串
//不然UserAgent的瀏覽器及系統訊息都會被你設定的新字串覆蓋過去
mWebView.getSettings().setUserAgentString(userAgentStr+"/ON_WEBVIEW");


之後在網頁上把UserAgent alert出來就可以看到剛剛新加入的字串了
Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; GT-P3100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30/ON_WEBVIEW

再來就是作一樣的判斷
var userAgent = navigator.userAgent;
if(/ON_WEBVIEW/i.test(userAgent)){
          //是否在webview上面看
     }

android-canvas set bitmap IllegalStateException error

最近在android上試做了一個畫筆的功能

然後要能把畫的圖片儲存跟讀取

讀取的方法我是用BitmapFactory.decodeFile把檔案圖片轉成bitmap

然後再把這個bitmap畫在canvas上,但時候遇到了一個error

錯誤訊息是這樣的

java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor

股溝了一下發現也有人遇到這樣的問題

其原因是被載入的bitmap是不可被改變的,所以也不能用來畫在canvas上

如果是把bitmap帶入canvas的建構涵式的話就會出現上面的錯誤訊息

但如果是用canvas.setBitmap()的話只會出現這樣的錯誤訊息

java.lang.IllegalStateException

這一點真的想要抱怨一下android,錯誤訊息劈哩啪啦列了一大堆

唯一看到有用的訊息就是這一串然後也講得不清不楚了

但我想錯誤的原因應該都是一樣的,都是不可改變bitmap

解決的方法是把載入的bitmpa在複製一份出來用就好了~

Canvas mCanvas ;
File bimapFile = new File("mmt\sdcard","pic.png");
Bitmap orgBitmap = BitmapFactory.decodeFile(bimapFile.getAbsolutePath());
Bitmap copyBitmap = orgBitmap.copy(Bitmap.Config.ARGB_8888, true);

//用建構帶入bitmap或是用setBitmap方法帶入都可以
mCanvas = new Canvas(copyBitmap)

//or
//mCanvas = new Canvas();
//mCanvas.setBitmap(copyBitmap)

2012年10月5日 星期五

android-Too large bitmap to be uploaded into a texture

今天遇到了一個問題是開啟了硬體加速後在imageView裡面塞圖片後發現畫面一片黑,
看了log他寫 Too large bitmap to be uploaded into a texture
上網查了一下原因找到這一篇文章
 Too large bitmap to be uploaded into a texture
看來也有人遇到同樣的問題,裡面的回答是
When using hardware acceleration, there is a limit to the size of a texture.
When you render a bitmap, it has to be uploaded to an OpenGL texture first.
Your bitmap happens to be bigger than the maximum texture size on Xoom (2048x2048.)
You need to use a smaller bitmap or split it into several bitmaps.
所以解答就是把圖縮小到2048之內吧 ! !