Más contenido relacionado La actualidad más candente (18) Similar a Advance Android Layout Walkthrough (20) Más de Somkiat Khitwongwattana (14) Advance Android Layout Walkthrough37. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
ic_food_online
ic_delivery
39. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android....
<item
android:width="40dp"
android:height="40dp"
android:drawable="@drawable/ic_activation_01"
android:gravity="center" />
<item
android:width="30dp"
android:height="30dp"
android:drawable="@drawable/ic_activation_02"
android:gravity="center" />
<item
android:width="20dp"
android:height="20dp"
android:drawable="@drawable/ic_activation_03"
android:gravity="center" />
</layer-list>
+ + =
40. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android....
<item
android:drawable="@drawable/btn_ok_pressed"
android:state_enabled="true"
android:state_pressed="true" />
<item
android:drawable="@drawable/btn_ok_disable"
android:state_enabled="false" />
<item
android:drawable="@drawable/btn_ok_normal" />
</selector>
Button Button Button
Normal
State
Pressed
State
Disable
State
41. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
ImageView ivScore = (ImageView)
findViewById(R.id.iv_asd);
int score = ...;
...
if(score == 0) {
ivScore.setImageResource(R.drawable.ic_score_bad);
} =else if(score == 1) {
ivScore.setImageResource(R.drawable.ic_score_ok);
} else if(score == 2) {
ivScore.setImageResource(R.drawable.ic_score_good);
}
42. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android...
<item
android:drawable="@drawable/ic_score_bad"
android:maxLevel="0" />
<item
android:drawable="@drawable/ic_score_ok"
android:maxLevel="1" />
<item
android:drawable="@drawable/ic_score_good"
android:maxLevel="2" />
</level-list>
ImageView ivScore = (ImageView)
findViewById(R.id.iv_score);
int score = ...;
...
ivScore.setImageLevel(score);
43. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
ImageView ivScore = (ImageView) findViewById(R.id.iv_score);
TransitionDrawable drawable =
(TransitionDrawable) ivScore.getDrawable();
...
drawable.startTransition(1000);
drawable.reverseTransition(1000);
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/...
<item
android:drawable="@drawable/ic_score_very_bad" />
<item
android:drawable="@drawable/ic_score_very_good" />
</transition>
44. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
ImageView ivScore = (ImageView) findViewById(R.id.iv_score);
TransitionDrawable drawable =
(TransitionDrawable) ivScore.getDrawable();
...
drawable.reverseTransition(1000);
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/...
<item
android:drawable="@drawable/ic_score_very_bad" />
<item
android:drawable="@drawable/ic_score_very_good" />
</transition>
45. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/...
android:drawable="@drawable/bg_badge"
android:insetBottom="10dp"
android:insetLeft="10dp"
android:insetRight="10dp"
android:insetTop="10dp"/>
46. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/...
android:clipOrientation="horizontal"
android:drawable="@drawable/ic_rate_very_good"
android:gravity="left" />
ImageView ivRate = (ImageView) findViewById(R.id.iv_rate);
ClipDrawable drawable = (ClipDrawable) ivRate.getDrawable();
...
drawable.setLevel(5000);
47. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/...
android:drawable="@drawable/ic_code_mania"
android:scaleGravity="center"
android:scaleHeight="60%"
android:scaleWidth="60%" />
48. Bitmap File
Nine-Patch File
Layer List
State List
Level List
Transition Drawable
Inset Drawable
Clip Drawable
Scale Drawable
Shape Drawable
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/...
<stroke
android:width="4dp"
android:color="#ffffff"
android:dashGap="10dp"
android:dashWidth="10dp" />
<solid
android:color="#237793" />
<corners
android:radius="10dp" />
</shape>
49. <?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal"
android:gravity="left">
<shape>
<solid
android:color="#ffd200" />
<corners
android:radius="50dp" />
</shape>
</clip>
Drawable Mixing
60. <style name="NextzyButton">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:minWidth">100dp</item>
<item name="android:minHeight">48dp</item>
</style>
<style name="NextzyButton.Blue" parent="NextzyButton">
<item name="android:background">@drawable/shape_nextzy_button_blue</item>
</style>
<style name="NextzyButton.Green" parent="NextzyButton">
<item name="android:background">@drawable/shape_nextzy_button_green</item>
</style>
67. Overdraw 4x or more
Overdraw 3x
Overdraw 2x
Overdraw 1x
Debug GPU overdraw
74. Is RelativeLayout expensive?
Yes, if you're using nested RelativeLayout.
But single RelativeLayout is cheaper than nested LinearLayout.
RelativeLayout LinearLayout
77. Use tint color with icon image
Original android:tint="#000000" android:tint="#ffcc00"
80. Avoid various dimension values
Better way, try to use global values
<dimen name="default_margin_padding_extra_small">1dp</dimen>
<dimen name="default_margin_padding_small">2dp</dimen>
<dimen name="default_margin_padding">4dp</dimen>
<dimen name="default_margin_padding_large">8dp</dimen>
<dimen name="default_margin_padding_extra_large">16dp</dimen>
82. Vector Drawable
Say goodbye to bitmap
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="80dp"
android:height="80dp"
android:viewportWidth="80"
android:viewportHeight="80">
<path
android:pathData="M0 0h24v24H0z" />
<path
android:fillColor="#FFFFFF"
android:pathData="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35
8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5
0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z" />
</vector>
93. Bucket of various densities
LDPI
MDPI
TVDPI
HDPI
280DPI
XHDPI
360DPI
400DPI
420DPI
XXHDPI
560DPI
XXXHDPI
120
160
213
240
280
320
360
400
420
480
560
640
94. Bucket of various densities
LDPI
MDPI
TVDPI
HDPI
280DPI
XHDPI
360DPI
400DPI
420DPI
XXHDPI
560DPI
XXXHDPI
120
160
213
240
280
320
360
400
420
480
560
640
96. 0.75
1
-
2
-
3
-
-
-
4
-
6
Bucket of various densities
LDPI
MDPI
TVDPI
HDPI
280DPI
XHDPI
360DPI
400DPI
420DPI
XXHDPI
560DPI
XXXHDPI
120
160
213
240
280
320
360
400
420
480
560
640
75x75
113x113
-
150x150
-
225x225
-
-
-
300x300
-
450x450
100. Which density should be supported
Regular ImageApp Icon
MDPI
HDPI
XHDPI
XXHDPI
XXXHDPI
MDPI
HDPI
XHDPI
XXHDPI