iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
1
Mobile Development

Android 開發經驗三十天系列 第 6

[Android 開發經驗三十天]D6一自定義View筆記(上)

  • 分享至 

  • xImage
  •  

這筆記會分成上中下去撰寫/images/emoticon/emoticon08.gif

tags: 鐵人賽

匯入Image To Drawable

1.在drawable資料夾右鍵 - > new -> Image Asset
2. 在Asset Type那欄位選擇 Action Bar And Tab Icons
3. 選擇 image Path然後匯入
4. 在按Next and Finish

如果需要圖片可以在這裡下載

Question : 那 Image Asset 跟 Vector Asset差在哪呢?

Image Asset : 以不同的密度創建各種類型的圖標,並確切顯示它們在項目中的放置位置。它包括用於調整圖標和添加背景的工具,所有這些工具都可以在預覽窗格中顯示結果時使它們完全按照您的預期顯示。
在創建的時候可以調整背景之類的

Vector Asset : 產生的是XML,XML中定義的單個向量圖形替換多個png

有看到網路上說使用Vector比PNG更好的說法:
可以參考這篇這裡

一些Layout觀念 ?


  1. LayoutInflater

在activity都是用setContentView()加載view
但是其實可以用layoutInflater也是用來加載布局的
在listView ScrollView常常用到動態加載

Q:how to new layoutInflater?

LayoutInflater layoutInflater = LayoutInflater.from(context);
LayoutInflater layoutInflater = (LayoutInflater) context
		.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Q:inflate ? resourceId ->現在的id ,root -> 想要的root layout

layoutInflater.inflate(resourceId, root);

example

mainLayout = (LinearLayout) findViewById(R.id.main_layout);
		LayoutInflater layoutInflater = LayoutInflater.from(this);
		View buttonLayout = layoutInflater.inflate(R.layout.button_layout, null);
		mainLayout.addView(buttonLayout);

layout 要添加可以用addView

Q:inflate three paramter ?

inflate(int resource, ViewGroup root, boolean attachToRoot)

Q:attchToRoot ?
1.root == null attachRoot no meaning
2.root != null attachToRoot == true resoure have parent = root
3.root !=null attchaToRoot==false 將布局文件最外層所有layout設置
view 加進上層parentView
recycleView is this
4.if no set attachToRoot preset is true

Q:layout_width ? layout_height ?
他們必須有 linearLayout or RelativeLayout

Q:為何我們總是可以用?
A:其實任何layout外面都有包一層rootLayout喔!
可以用下面程式碼去看!

mainLayout = (LinearLayout) findViewById(R.id.main_layout);
ViewParent viewParent = mainLayout.getParent();

invalidate() vs requestLayout() ?

invalidate() vs requestLayout()

invalidate方法只會執行onDraw方法,所以若不需要重新測量可以呼叫這個
requestLayout方法只會執行onMeasure方法和onLayout方法,並不會執行onDraw方法。,不需要重新繪圖可以呼叫這個
若是兩者皆要 可以先叫 requestLayout 在叫 invalidate

invalidate vs postInvalidate ?

invalidate()在UI線程中,若要在另外的線程需用handler通知更新

而postInvalidate()在另外開的線程中被調用

參考


上一篇
[Android經驗三十天]Day5一Java RecycleView Adapter!
下一篇
[Android經驗三十天]Day7一自定義View觀念 (中)
系列文
Android 開發經驗三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言