Android Studio 可以將 PNG, JPG, BMP, GIF 轉為 WebP,可有效縮小圖檔大小。
Android 4.0(API 14) 以上就可以支援WebP
但含透明的圖片,需要Android 4.2.1(API 17)才支援。
你可以轉一個檔案,或將整個資料夾一起轉。
右鍵點擊圖檔或資料夾,點擊 Convert to WebP
這裡可設定壓縮比
下圖可以看到檔案縮小了,圖檔也看不出2張有什麼差異。
也可以從這裡下載Webp轉檔工具
https://developers.google.com/speed/webp/
參考
https://developer.android.com/studio/write/convert-webp.html
Evan的app 學習筆記
android app 的開發學習筆記
2017年5月31日 星期三
Android 9-Patch 建立自動調整大小以適應視圖內容與螢幕尺吋的圖片
Android 可以使用9-Patch建立自動調整大小以適應視圖內容與螢幕尺吋的圖片,
例:我要把這個圖檔當作我的背景圖,裡面放文字用。紫色區塊需要隨著裡面的字變多而延展。
做成像下圖的效果:
作法很簡單:
在android studio,右鍵點擊要建立NinePatch的png圖檔,然後點擊 Create 9-path file。
點擊9-patch檔案,在android studio 打開,會出現如下畫面
在4個邊邊的灰白相間的線,點一下加上黑線,這個黑線代表可延展區塊
要取消黑線的話,按住shift再點一下黑線就可以了。
勾選下方的Show patchs,可以看到粉紅色的區塊為可延展區塊,綠色區塊為不可延展區塊。
另外如果你build 看到這樣的訊息:some file crunching failed ,代表你的 9-patch 檔案有問題
開啟9-patch檔案,勾選 Show bad patches,就可以看到錯誤在哪裡了
完整程式碼:https://github.com/evanchen76/NinePatchSample
參考:https://developer.android.com/studio/write/draw9patch.html
例:我要把這個圖檔當作我的背景圖,裡面放文字用。紫色區塊需要隨著裡面的字變多而延展。
做成像下圖的效果:
作法很簡單:
在android studio,右鍵點擊要建立NinePatch的png圖檔,然後點擊 Create 9-path file。
點擊9-patch檔案,在android studio 打開,會出現如下畫面
在4個邊邊的灰白相間的線,點一下加上黑線,這個黑線代表可延展區塊
要取消黑線的話,按住shift再點一下黑線就可以了。
勾選下方的Show patchs,可以看到粉紅色的區塊為可延展區塊,綠色區塊為不可延展區塊。
另外如果你build 看到這樣的訊息:some file crunching failed ,代表你的 9-patch 檔案有問題
開啟9-patch檔案,勾選 Show bad patches,就可以看到錯誤在哪裡了
完整程式碼:https://github.com/evanchen76/NinePatchSample
參考:https://developer.android.com/studio/write/draw9patch.html
2017年5月30日 星期二
Android Notification 的幾種樣式
推播內容加上一張小圖片
推播內容加上大圖加上下方的按鈕
//載入bitmap
Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.mipmap.user);//設定大圖Style
NotificationCompat.BigPictureStyle bitStyle = new NotificationCompat.BigPictureStyle();
bitStyle.bigPicture(largeIcon);
//設定按鈕
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.addAction(R.mipmap.ic_launcher, "Reply", replyIntent)
推播內容使用客製的View
//new RemoteViews 載入客製layout
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.notification_view);
//設定使用CustomView
notificationBuilder.setCustomBigContentView(remoteViews);
客製view
notification_view.xml
完整程式碼:https://github.com/evanchen76/PushNotificationSample
參考:https://developer.android.com/guide/topics/ui/notifiers/notifications.html
2017年5月27日 星期六
Android Canvas 繪製幾何圖形
Canvas的意思就是畫布
Paint 代表了Canvas上的畫筆
以下範列記錄幾種Canvas繪製幾何圖向的方法
canvas.drawArc (扇形)
canvas.drawCircle(圓)
canvas.drawOval(橢圓)
canvas.drawPoint(點)
canvas.drawRect(矩形)
canvas.drawRoundRect(圓角矩形)
canvas.drawLine(線)
cnavas.drawPath(路徑)
DrawCircle
DrawArc
DrawOval
DrawLine
DrawPath
DrawPoints
DrawRect
DrawRoundRect
完整程式碼: https://github.com/evanchen76/CanvasSample
Paint 代表了Canvas上的畫筆
以下範列記錄幾種Canvas繪製幾何圖向的方法
canvas.drawArc (扇形)
canvas.drawCircle(圓)
canvas.drawOval(橢圓)
canvas.drawPoint(點)
canvas.drawRect(矩形)
canvas.drawRoundRect(圓角矩形)
canvas.drawLine(線)
cnavas.drawPath(路徑)
DrawCircle
DrawArc
DrawOval
DrawLine
DrawPath
DrawPoints
DrawRect
DrawRoundRect
完整程式碼: https://github.com/evanchen76/CanvasSample
2017年5月24日 星期三
Android Gradle productFlavors 匯出不同版本APK
在開發android app時,我們可能會有如下的需求:
正式版與測試版,會有正式版連線的API與測試版連線的API,
或是測試環境與正式環境有不同的ApplicatoinId時,
這時就可以使用Gradle productFlavors,依不同的版本設定不同的參數
在Gradle裡加上productFlavors ,將版本分為dev、prod
dev、prod各使用不同的applicationId
productFlavors {
dev {
applicationId "evan.chen.app.productflavorsample.dev"
resValue "string", "version_type", "Free Version" }
prod {
applicationId "evan.chen.app.productflavorsample"
resValue "string", "version_type", "Pro Version" }
}
接著建立一個Constants裡放API的網址。
public class Constants {
public static final String API_URL = "http://staging-api.evanchenapp.com";
public static final String API_URL = "http://staging-api.evanchenapp.com";
}
public class Constants {
public static final String API_URL = "http://api.evanchenapp.com";
public static final String API_URL = "http://api.evanchenapp.com";
}
MainActivity 取得 API_URL
public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Log", "Url:" + Constants.API_URL);
}
}
最後,在Build Variants選擇build的版本就可以了
2017年5月23日 星期二
android Keyguard 呼叫螢幕解鎖驗證
2017年5月12日 星期五
Android MVP Pattern (Model View Presenter)
MVP (Model View Presenter)是由MVC (Model View Controller)演變而來。
在MVC的架構,通常會把layout(xml)當成View,Activity當成Controller,
事實上,Activity 卻是Controller 與View 的混合,於是Activity既要做處理View,也負責商業邏輯。使得Activity越來越肥。
MVC -> MVP 的最大差異在於 Activity的商業邏輯移到Presenter,Activity 專心於View
MVP:
Model - 提供資料、儲存資料 例:SharedPreferences、呼叫API
View - 負責展示UI,如 Activity、Fragment
Presenter - 負責邏輯處理
來看看這個範例,輸入帳號密碼後,按下「LOGIN」顯示登入成功或失敗。
完整程式
https://github.com/evanchen76/MVP-Pattern
在MVC的架構,通常會把layout(xml)當成View,Activity當成Controller,
事實上,Activity 卻是Controller 與View 的混合,於是Activity既要做處理View,也負責商業邏輯。使得Activity越來越肥。
MVC -> MVP 的最大差異在於 Activity的商業邏輯移到Presenter,Activity 專心於View
MVP:
Model - 提供資料、儲存資料 例:SharedPreferences、呼叫API
View - 負責展示UI,如 Activity、Fragment
Presenter - 負責邏輯處理
來看看這個範例,輸入帳號密碼後,按下「LOGIN」顯示登入成功或失敗。
新增LoginActivty 為MVP 中的View
新增LoginContract ,裡面放了ILoginView、ILoginPresenter 2個Interface
新增LoginPresenter,負責商業邏輯,與Model互動。
建立 User Model,負責檢查帳號是否正確。(範例單純hard code判斷,一般在此與API 登入)
LoginActivity ( View )
LoginPresenter (Presenter)
User (Model)
https://github.com/evanchen76/MVP-Pattern
訂閱:
文章 (Atom)