Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Support Vector Drawable
Search
takahirom
March 16, 2016
2.2k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Support Vector Drawable
takahirom
March 16, 2016
More Decks by takahirom
See All by takahirom
AIエージェントで 変わるAndroid開発環境
takahirom
2
490
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
140
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1k
Google の LLM ライブラリ を Android アプリで 使うには?
takahirom
1
2.2k
Robolectric Native Graphics and Roborazzi
takahirom
1
2.3k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.5k
Android Tools & Performance
takahirom
1
1.2k
Jetpack Compose State Practices
takahirom
1
1.5k
Inside Jetpack Compose
takahirom
1
1.1k
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2.1k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
280
Thoughts on Productivity
jonyablonski
76
5.2k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
170
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Prompt Engineering for Job Search
mfonobong
0
370
A better future with KSS
kneath
240
18k
Producing Creativity
orderedlist
PRO
348
40k
GitHub's CSS Performance
jonrohan
1033
470k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
260
Test your architecture with Archunit
thirion
1
2.3k
Transcript
4VQQPSU7FDUPS%SBXBCMF UBLBIJSPN
ࣗʹ͍ͭͯ w UBLBIJSPN !OFX@SVOOBCMF ͱ͍͏໊લͰ5XJUUFS ͱ͔͍ͬͯ·͢ w "OESPJE͕͖Ͱ͢ w 2JJUBͱ͔࣌ʑॻ͍ͯ·͢
4VQQPSU-JCSBSZ w ϦϦʔε͞Ε·ͨ͠Ͷʂ w "OESPJE%FWFMPQFS#MPHͰҰ൪࠷ॳʹհ͞Εͯ ͍ͨͷ͕4VQQPSU7FDUPS%SBXBCMFTͱ"OJNBUFE 7FDUPS%SBXBCMFTͰͨ͠
4VQQPSU-JCSBSZ w "QQ$PNQBU-JCSBSZࣗମ7FDUPS%SBXBCMFରԠ ͓ͯ͠Γɺˋఔখ͘͞ͳͬͨΑ͏Ͱ͢
7FDUPS%SBXBCMFͱ
7FDUPS%SBXBCMFͱ w ϕΫτϧܗࣜͷσʔλʹΑΔ%SBXBCMF w WFDUPSλάͰهड़͢Δ
47( 4DBMBCMF7FDUPS(SBQIJDT ܗࣜͷσʔλ w ύεσʔλ ϕΫτϧܗࣜͷσʔλ ʹΑͬͯܗ ͕࡞ΒΕͯը૾ʹͳΔ
ύεσʔλʹ͍ͭͯ w ΞϧϑΝϕοτͰ۠ͬͯΈΔͱͳΜͱͳ͘ҙຯ͕ Θ͔Δ
ύεσʔλʹ͍ͭͯ w ΞϧϑΝϕοτͰ۠ͬͯΈΔͱͳΜͱͳ͘ҙຯ͕ Θ͔Δ
ύεσʔλʹ͍ͭͯ w ΞϧϑΝϕοτͰ۠ͬͯΈΔͱͳΜͱͳ͘ҙຯ͕ Θ͔Δ
ύεσʔλʹ͍ͭͯ w ΞϧϑΝϕοτͰ۠ͬͯΈΔͱͳΜͱͳ͘ҙຯ͕ Θ͔Δ
ύεσʔλʹ͍ͭͯ w ΞϧϑΝϕοτͰ۠ͬͯΈΔͱͳΜͱͳ͘ҙຯ͕ Θ͔Δ
ύεσʔλʹ͍ͭͯ ͓͍ͬͯͯଛͳ͍Ͱ͕͢ɺجຊతʹύεσʔλ ΠϥϨͳͲ͔Βॻ͖ग़ͨ͠Γɺ(PPHMFͷ*DPOΛͦͷ· ·ར༻͢ΔͨΊɺΒͳͯ͘େৎͰ͢ɻ IUUQTXXXXPSH5347(QBUITIUNM 8$ͷαΠτʹ໌֬ͳఆ͕ٛ͋ΓࢀߟʹͳΓ·͢
BOESPJEXJEUI BOESPJEIFJHIU ͜ͷ%SBXBCMFͷେ͖͞Λઃఆ͢Δ 7JFXʹXSBQ@DPOUFOUͨ͠ͱ͖ʹදࣔ͢Δେ͖͞
BOESPJEWJFXQPSU)FJHIU BESPJEWJFXQPSU8JEUI ύεͷσʔλ͕ඳը͞ΕΔΩϟϯόεͷେ͖͞
Ճํ๏ w %SBXBCMFϑΥϧμͰӈΫϦοΫͯ͠7FDUPS"TTFU ͰՃͰ͖·͢ɻ
7FDUPS%SBXBCMFͷϝϦοτ
ϝϦοτ֦େͯ͠ ߥ͘ͳΒͳ͍ w ઢۂઢͳͲͷύεσʔλͰهड़͞Ε͍ͯΔͨΊ
ϝϦοτΞχϝʔγϣϯ Ͱ͖Δ w ࡾ֯ͷਤܗ͕࢛֯ʹมΘΓͳ͕ΒճΔ DIJVLJBOJNBUFEWFDUPSESBXBCMFΑΓ
ϝϦοτը૾ϑΝΠϧ͕ ҰͭͰࡁΉ w BQLαΠζ͕খ͘͞ͳΔ w ࠓ·Ͱ͍ͭ͘ը໘ີຖʹը૾Λ࡞͍ͬͯͨͷΛҰͭ Ͱྑ͘ͳΔͨΊɺσβΠφʔͷ͕ݮͰ͖Δ %FW#ZUFT"OESPJE7FDUPS(SBQIJDTΑΓ
छྨͷ7FDUPS%SBXBCMFͷ ར༻ํ๏ w "1*-FWFMҎ্ͷ7FDUPS%SBXBCMF w Ұ൪ී௨ͷͭ w "OESPJE4UVEJPTVQQPSUGPS7FDUPS%SBXBCMF w "OESPJE4UVEJPʹΑΔΞϓϩʔν
w 7FDUPS%SBXCMF$PNQBU w 4VQQPSU-JCSBSZʹΑΔΞϓϩʔν
"1*-FWFMҎ্ͷ 7FDUPS%SBXBCMF w -PMMJQPQҎ߱ͷ04ʹී௨ʹ͍ͬͯΔ w ϝϦοτ w 7FDUPS%SBXBCMFͷػೳ͕ϑϧαϙʔ τ͞Ε͍ͯΔ w
σϝϦοτ w "1*-FWFMҎ্Ͱ͋Δඞཁ͕͋Δ ˠNJO4ELͳΒ͜ΕͰྑ͍ͱࢥ͍·͢
"OESPJE4UVEJPTVQQPSU GPS7FDUPS%SBXBCMF
"OESPJE4UVEJPTVQQPSU GPS7FDUPS%SBXBCMF w "OESPJE4UVEJPʙ CVJME5PPMT7FSTJPO ΑΓʁ w 7FDUPS%SBXCMF͕͋ͬͨΒίϯύΠϧ࣌ʹQOHϑΝ ΠϧΛੜͯ͘͠ΕΔ
w -PMMJQPQҎ߱Ͱ7FDUPS%SBXBCMFΛར༻͢Δ
"OESPJE4UVEJPTVQQPSU GPS7FDUPS%SBXBCMF w ϝϦοτ w QOHϑΝΠϧͳͷͰࠓ·ͰͱมΘΒͣʹදࣔ͞ΕΔ w σϝϦοτ w BQLαΠζ͕େ͖͘ͳΔ
w ΞχϝʔγϣϯͰ͖ͳ͍ w େ͖͕͞ҧ͏ͱߥ͘ͳΔ *NBHF7JFXͷXJEUIΛઃఆ͍ͯ͠Δ࣌ͳͲ w BBQUͱ͍͏Ϗϧυ࣌ʹΔϦιʔεΛॲཧ͢ΔίϚϯυ͕উखʹੜ͢ΔͱࢥΘΕΔ CVJME UPPMTΑΓBBQUίϚϯυʹOPWFSTJPOWFDUPSTͱ͍͏Φϓγϣϯ͕͋ΔͨΊ
4VQQPSU7FDUPS%SBXBCMF w "QQ$PNQBU"DUJWJUZͱ"QQ$PNQBUܥͷ7JFX͕ 7FDUPS%SBXCMF$PNQBUͱͯ͠όοΫϙʔτͯ͘͠ΕΔ w ϝϦοτ w "1*-FWFM͔ΒରԠ w σϝϦοτ
w ͏·͘ϦιʔεΛࢦఆ͢Δඞཁ͕͋Δ w Ξχϝʔγϣϯͷαϙʔτ͕ᘳͰͳ͍
छྨͷ7FDUPS%SBXBCMFͷ ར༻ํ๏·ͱΊ 7FDUPS%SBXCMF "OESPJE4UVEJP TVQQPSUGPS 7FDUPS%SBXBCMF 7FDUPS%SBXBCMF $PNQBU "1*-FWFM
੩ࢭը ˓ ˓ ˓ BQLαΠζ ˓ º ˓ Ξχϝʔγϣϯ ˓ º Ҏ্Ͱ˓ ˚ Ҏ্Ͱ˓ େ͖͞มߋ ˓ º Ҏ্Ͱ˓ ˓
4VQQPSU7FDUPS%SBXBCMF ಋೖํ๏
4VQQPSU7FDUPS%SBXBCMF ಋೖํ๏ w BBQUͷͨΊͷΦϓγϣϯॻ͘ w ˠ"OESPJE4UVEJPTVQQPSUGPS7FDUPS%SBXBCMFΛࢭΊΔͨΊͩͱࢥΘΕΔ (SBEMF1MVHJOҎલ BOESPJE\ EFGBVMU$POpH\ HFOFSBUFE%FOTJUJFT<>
^ BBQU0QUJPOT\ BEEJUJPOBM1BSBNFUFSTOPWFSTJPOWFDUPST ^ ^ (SBEMF1MVHJOҎ߱ BOESPJE\ EFGBVMU$POpH\ WFDUPS%SBXBCMFTVTF4VQQPSU-JCSBSZUSVF ^ ^
dependenciesʁ 4VQQPSU7FDUPS%SBXBCMF ಋೖํ๏ EFQFOEFODJFT\ DPNQJMFbDPNBOESPJETVQQPSUTVQQPSUWFDUPSESBXBCMF ^
dependenciesʁ appcompat-v7ʹ͍ͭͯ͘ΔΑ͏ͳͷͰඞཁͳ͠ʂ 4VQQPSU7FDUPS%SBXBCMF ಋೖํ๏ EFQFOEFODJFT\ DPNQJMFbDPNBOESPJETVQQPSUTVQQPSUWFDUPSESBXBCMF ^
ύλʔϯͷઃఆํ๏ ᶃBQQTSD$PNQBUʹΑΔํ๏ ᶄؒʹ%SBXBCMFΛڬΉํ๏
ᶃBQQTSD$PNQBUʹΑΔ ํ๏
ᶃBQQTSD$PNQBUʹΑΔ ํ๏ <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat=“@drawable/ic_arrow_back_black_24dp" android:tint="?colorPrimaryDark" /> BOESPJETSDͰͳ͘ BQQTSD$PNQBUͰࢦఆ͢Δ
ˡUJOUઃఆՄೳ
ᶃBQQTSD$PNQBUʹΑΔ ํ๏ w "QQ$PNQBU"DUJWJUZDIFFTFTRVBSFΛ࡞͍ͬͯΔ $ISJT#BOFT͞Μ͍Θ͘ w l*U`TJOUFOEFEUPCFBSFQMBDFNFOUGPS BOESPJETSDXIJDIZPVDBOTBGFMZVTFGPSOPO WFDUPSBTTFUTUPPz"QQ$PNQBUW "HFPGUIFWFDUPSTΑΓ w
7FDUPSը૾͡Όͳ͍σʔλ҆શʹ͑Δ BOESPJETSDͷସ͑ͱͯ͠࡞ΒΕͨʂ
ᶃBQQTSD$PNQBUʹΑΔ ํ๏ BOESPJݱࡏ"OESPJE4UVEJP্Ͱ BQQTSD$PNQBUΛ͏ͱ-JOUΤϥʔ͕ग़Δ͜ͱ͕͋Δ ˠ"041ͷJTTVF্Ͱ'VUVSF3FMFBTFʹͳ͍ͬͯΔͷͰ ͦͷ͏࣏ͪΔͱࢥΘΕΔͷͰؾʹ͠ͳ͍ IUUQTDPEFHPPHMFDPNQBOESPJEJTTVFTEFUBJM JE
ᶄؒʹ%SBXBCMFΛڬΉ ํ๏
ᶄؒʹ%SBXBCMFΛڬΉ ํ๏ w ؒʹ4UBUF-JTU%SBXBCMF*OTFU%SBXBCMFͳͲ͕ೖͬ ͍ͯΕBQQTSD$PNQBUͰࢦఆ͠ͳͯ͘0, drawable/selector.xml <?xml version="1.0" encoding="utf-8"?> <selector
xmlns:android=“…”> <item android:drawable="@drawable/ ic_android_black_24dp"/> </selector> layout/layout.xml <ImageView android:id="@+id/image" android:src="@drawable/selector" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
ͲͪΒΛ͏͖͔ʁ w ෆཁͳΫϥογϡΛආ͚ΔͨΊɺBQQTSD$PNQBUΛ جຊతʹར༻͍ͯ͘͠ํ͕ྑ͍ͱࢥ͍·͢ɻ w ͨͩ5FYU7JFXͷBOESPJEESBXBCMF3JHIUͳͲ TSD$PNQBUΛར༻͢Δ͜ͱ͕Ͱ͖ͳ͍ॴؒʹ %SBXBCMFΛڬΉํ๏ΛऔΔͷ͕ྑ͍ͱࢥ͍·͢ɻ
Έʹ͍ͭͯ w ͲͷΑ͏ʹ"QQ$PNQBU*NBHF7JFX͕ࠩ͠ࠐ·Ε Δʁ w BQQTSD$PNQBUͲͷΑ͏ʹదԠ͞ΕΔʁ w ؒʹ%SBXBCMFΛڬΉͱͲ͏ͯ͠େৎʁ w ͜͜ʹॻ͖·ͨ͠
w IUUQRJJUBDPNUBLBIJSPNJUFNT DGBEFD
ύϑΥʔϚϯε
"041ʹύϑΥʔϚϯεܭଌͬΆ͍ςετ ༻ͷΫϥε͕͋ΓɺͦΕΛ͍ͬͯ͡࡞ͬͯΈ ·ͨ͠ ˞ܰ͘ଌͬͯΈ͚ͨͩͰ͢͜͏ͬͯܭଌ ͢Δͱྑ͍ͳͲ͕͋ΕޙͰڭ͑ͯԼ͍͞ IUUQTHJUIVCDPNUBLBIJSPN7FDUPS%SBXBCMF1FSGPSNBODF
"1*-FWFMҎ্ͩͱׂͱ͍ /FYVT9 4VQQPSU7FDUPS%SBXBCMF த7FDUPS%SBXBCMF TFU*NBHF3FTPVSDF NT
NT #JUNBQ TFU*NBHF3FTPVSDF NT NT NT ը૾Ұݸ͋ͨΓͷ࣌ؒ
4VQQPSU7FDUPS%SBXBCMF ׂͱ͍ 40& 4VQQPSU7FDUPS%SBXBCMF TFU*NBHF3FTPVSDF NT NT
NT #JUNBQ TFU*NBHF3FTPVSDF NT NT NT ը૾Ұݸ͋ͨΓͷ࣌ؒ
4VQQPSU7FDUPS%SBXBCMF ͪΐͬͱ͍ ମײͰؾʹͳΓ·ͤΜ ࠷৽ͷͰͦΜͳʹ͕͔͔࣌ؒΒͳ͍Α ͏Ͱ͢ɻ"OESPJEܥͷγΣΞ৳ͼ͍ͯ·͢ ͪΖΜ8FC͔Βऔͬͯ͘ΔΑΓ͔ͳΓ ͍Ͱ͢
4VQQPSU7FDUPS%SBXBCMF ͪΐͬͱ͍ 7FDUPS%SBXBCMFͷެࣜͷಈըͰ ύεγϯϓϧʹ͓ͯ͘͠ͱྑ͍ খ͍͞αΠζʹ੍ݶ͢Δͱྑ͍ ͱ͍͏͜ͱͰͨ͠ɻ IUUQTXXXZPVUVCFDPNXBUDI WXM'7**TU,N" %FW#ZUFT"OESPJE7FDUPS(SBQIJDTΑΓ
"OJNBUFE7FDUPS%SBXCMF $PNQBU
"OJNBUFE7FDUPS%SBXCMF $PNQBU w "1*-FWFM͔Βར༻Ͱ͖Δ w BOJNBUFEWFDUPSΛ͏
"OJNBUFE7FDUPS%SBXCMF ͷ͍ํ
BOJNBUFEWFDUPSΛ༻ҙ͢Δ <?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android=“…” android:drawable="@drawable/vectordrawable" > <target
android:name="rotationGroup" android:animation="@anim/rotation" /> </animated-vector>
7FDUPS%SBXBCMFͱ PCKFDU"OJNBUPSΛ༻ҙ͢Δ <?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android=“…” android:drawable="@drawable/vectordrawable" >
<target android:name="rotationGroup" android:animation="@anim/rotation" /> </animated-vector> <vector xmlns:android=“…” android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > <group android:name="rotationGroup" android:pivotX="300.0" android:pivotY="300.0" android:rotation="45.0" > <path android:name="v" android:fillColor="#000000" android:pathData="M300,70 …” /> </group> </vector> BOJNBUFEWFDUPS WFDUPSESXBCMFYNM <objectAnimator xmlns:android=“…” android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360"/>
໊લΛἧ͑ͯԿΛΞχϝʔγϣϯ͢Δ ͔ࢦఆ͢Δ <?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android=“…” android:drawable="@drawable/ vectordrawable"
> <target android:name="rotationGroup" android:animation="@anim/rotation" /> </animated-vector> <vector xmlns:android=“…” android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > <group android:name="rotationGroup" android:pivotX="300.0" android:pivotY="300.0" android:rotation="45.0" > <path android:name="v" android:fillColor="#000000" android:pathData="M300,70 …” /> </group> </vector> BOJNBUFEWFDUPS WFDUPSESXBCMFYNM <objectAnimator xmlns:android=“…” android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360"/>
Ξχϝʔγϣϯͤ͞Δ ಈ͘Α͏ʹ͢Δʹ*NBHF7JFXͳͲʹBQQTSD$PNQBUͰ 7FDUPS%SBXBCMFΛηοτͯ͠ҎԼͷΑ͏ʹ͢Δ %SBXBCMFESBXBCMFJNBHF7JFXHFU%SBXBCMF JG ESBXBCMFJOTUBODFPG"OJNBUBCMF \
"OJNBUBCMF ESBXBCMF TUBSU ^
"OJNBUFE7FDUPS%SBXCMF $PNQBUͷ੍ݶ w ˡͷࡾ͔֯Β࢛֯ʹมΘ͍ͬͯ͘Α͏ͳ ಈ͖l1BUI.PSQIJOHz͕ར༻Ͱ͖ͳ͍ w ଞʹ1BUI*OUFSQPMBUJPO.PWF BMPOHQBUI͕ར༻Ͱ͖ͳ͍ͳͲͷ੍ݶ ͕͋Δ w
কདྷͷΞοϓσʔτͰͳΜͱ͔ͳΕɺɺ DIJVLJBOJNBUFEWFDUPSESBXBCMFΑΓ
ͦΕͰϦονͳಈ͖Λ ͍ͤͨ͞ w PCKFDU"OJNBUPSͰUSJN1BUI&OE ͷϓϩύςΟΛมߋͤ͞Δ͜ͱͰ ઢͷ͞Λมߋͨ͠Γͯ͠͏·͘ Ͱ͖ΔΈ͍ͨͰ͢ w ͋ͱେ͖͞มߋճసͰؤுΔ ײ͡Ͱ͢
IUUQTHJUIVCDPNMFXJTNDHFBSZ"OJNBUFE7FDUPS%SBXBCMF$PNQBUQMBZ UPSFTFUCVUUPO
·ͱΊ 7FDUPS%SBXBCMF࠷ߴͰ͢ɻ BQQTSD$PNQBUΛ͏Α͏ʹ͠·͠ΐ͏ɻ ͪΖΜϝϦοτɾσϝϦοτ͋Γ·͕͢ɺ BQLαΠζYYYIEQJͷରԠ͕Ͱ͖Δͳ ͲɺجຊతʹରԠͰ͍͍ͱࢥ͍·͢ɻ