potatotips #42にて発表したKotlinでCustomViewを作る話のスライドです。
$VTUPN7JFXJO,PUMJO:PTIJIJSP8BEBBLB!FEPLVQQPUBUPUJQT!$PPLQBE *OD
View Slide
୭ͶΜ͓લ :PTIJIJSP8BEBƓ $ZCFS"HFOU *OD "EUFDI4UVEJP"*.FTTFOHFS!FEPLVQȍ FEPLVQFEPLVQ,PUMJO ྺ ϲ݄
,PUMJO ྺ ϲ݄୭ͶΜ͓લ :PTIJIJSP8BEBƓ $ZCFS"HFOU *OD "EUFDI4UVEJP"*.FTTFOHFS!FEPLVQȍ FEPLVQFEPLVQ
ࠓճ͢͜ͱ ⋆ ,PUMJO Ͱ $VTUPN7JFX Λ࡞͢Δ? ίϯετϥΫλͲ͏ͳΔʜʁ? +BWB ͔ΒݺͿࡍʹʜʁ? $BMMCBDL Ͳ͏͢Εʜʁ
$POTUSVDUPS QVCMJDDMBTT$VTUPN7JFXFYUFOET7JFX\QVCMJD$VTUPN7JFX $POUFYUDPOUFYU\TVQFS DPOUFYUJOJU ^QVCMJD$VTUPN7JFX $POUFYUDPOUFYU !/VMMBCMF"UUSJCVUF4FUBUUST\TVQFS DPOUFYU BUUSTJOJU ^QVCMJD$VTUPN7JFX $POUFYUDPOUFYU !/VMMBCMF"UUSJCVUF4FUBUUST JOUEFG4UZMF"UUS\TVQFS DPOUFYU BUUST EFG4UZMF"UUSJOJU ^QSJWBUFWPJEJOJU \JOJUJBMJ[F^NFUIPET^⋆ ී௨ͷ $POTUSVDUPS
$POTUSVDUPS DMBTT$VTUPN7JFX7JFX\DPOTUSVDUPS DPOUFYU$POUFYUTVQFS DPOUFYUDPOTUSVDUPS DPOUFYU$POUFYU BUUST"UUSJCVUF4FU TVQFS DPOUFYU BUUSTDPOTUSVDUPS DPOUFYU$POUFYU BUUST"UUSJCVUF4FU EFG4UZMF"UUS*OU TVQFS DPOUFYU BUUST EFG4UZMF"UUSJOJU\JOJUJBMJ[F^NFUIPET^⋆ ,PUMJO Ͱ JOJU ϒϩοΫΛͬͯΈΔTFDPOEFSZDPOTUSVDUPST
$POTUSVDUPS DMBTT$VTUPN7JFX!+WN0WFSMPBETDPOTUSVDUPSDPOUFYU$POUFYU BUUST"UUSJCVUF4FU OVMM EFG4UZMF"UUS*OU7JFX DPOUFYU BUUST EFG4UZMF"UUS\JOJU\JOJUJBMJ[F^NFUIPET^⋆ σϑΥϧτҾΛͬͯΈΔQSJNBSZDPOTUSVDUPS
!+WN0WFSMPBET Ξϊςʔγϣϯ ⋆ +BWB ༻ͷ 0WFSMPBENFUIPE Λ࡞ͬͯ͘ΕΔ+BWB ͔ΒσϑΥϧτҾࢀরͰ͖ͳ͍ɻ/P4VDI.FUIPE&YDFQUJPO Λు͔ΕΔ!+WN0WFSMPBETΞϊςʔγϣϯΛՃ͢Δͱ+BWB ͔Βݟͨͱ͖ʹϝιου͕ଟॏఆٛ͞ΕΔ,PUMJO ͔Β "OESPJE4UVEJP ͷ *OUFOTJPO Ͱ!+WN0WFSMPBET ͳίϯετϥΫλΛ࡞ͬͯ͘ΕΔΑ͏ʹ"EE"OESPJE7JFXDPOTUSVDUPSTVTJOH!+WN0WFSMPBET
$BMMCBDL QVCMJDDMBTT-JTUFOFS4BNQMF7JFXFYUFOET7JFX\QSJWBUF$BMMCBDLDBMMCBDLQVCMJDWPJEIPHF \JG DBMMCBDLOVMMSFUVSODBMMCBDLPO)PHF ^QVCMJDJOUFSGBDF$BMMCBDL\QVCMJDWPJEPO)PHF ^^QVCMJDDMBTT.BJO"DUJWJUZFYUFOET"QQ$PNQBU"DUJWJUZ JNQMFNFOUT-JTUFOFS4BNQMF7JFX$BMM#BDL\!0WFSSJEFQVCMJDWPJEPO)PHF \DBMMCBDLT^^⋆ ී௨ͷϦεφʔύλʔϯ
$BMMCBDL DMBTT-JTUFOFS4BNQMF7JFX7JFX\QSJWBUFWBSDBMMCBDL$BMMCBDL OVMMQSJWBUFGVOIPHF \DBMMCBDL PO)PHF TBGFDBMM^JOUFSGBDF$BMMCBDL\GVOPO)PHF ^^DMBTT.BJO"DUJWJUZ"QQ$PNQBU"DUJWJUZ -JTUFOFS4BNQMF7JFX$BMMCBDL\PWFSSJEFGVOPO)PHF \DBMMCBDLT^^⋆ ͦͷ·· ,PUMJO ʹͯ͠ΈΔ
$BMMCBDL DMBTT-JTUFOFS4BNQMF7JFX7JFX\ 㕉ᡔә◌क✖ԒԾԠԏԗӔӘӑӇӘӨӨՉ՛ԸӕᛝӉӅӳӶӵWBSPO)PHF 6OJU OVMMQSJWBUFGVOIPHF \PO)PHF JOWPLF ^^DMBTT.BJO"DUJWJUZ"QQ$PNQBU"DUJWJUZ \ PWFSSJEFGVOPO$SFBUF TBWFE*OTUBODF4UBUF#VOEMF \MJTUFOFS4BNQMF7JFXPO)PHF\DBMMCBDLT^^^⋆ ؔϦςϥϧͱ JOWPLF Ͱ -JTUFOFS ͕ෆཁʹ
$BMMCBDL QVCMJDDMBTT+BWB.BJO"DUJWJUZFYUFOET"QQ$PNQBU"DUJWJUZ\!0WFSSJEFQSPUFDUFEWPJEPO$SFBUF !/VMMBCMF#VOEMFTBWFE*OTUBODF4UBUF\MJTUFOFS4BNQMF7JFXTFU0O)PHF OFX'VODUJPO6OJU \!0WFSSJEFQVCMJD6OJUJOWPLF \DBMMCBDLTSFUVSOOVMM^^^^⋆ +BWB Ͱѻ͏ͱ͖ 'VODUJPO/ ΛҾʹ༩͑Δ'VODUJPO/㮢/ әᐠᡔӘંᡔ㮣ә ,PUMJO Ә㕉ᡔѭ6OJU ӔӴ OVMM Ӽ㈘Ӄ
$BMMCBDL ⋆ Ҿ͕ଟ͘ͳͬͨͱ͖Λߟ͑Δ⋆ ֦େɾॖখɾεΫϩʔϧͰ͖Δ *NBHF7JFXͰഒ࠲ඪɺΈग़͠Λ௨ͯ͠΄͍͠WBSPO$IBOHF4UBUF TDBMF'MPBU Y'MPBU Z'MPBU PWFS9*OU PWFS:*OU6OJU OVMM
$BMMCBDL ⋆ +BWB ίʔυͰඇৗʹ͍ 'VODUJPO ʹͳΔ⋆ ิͰࣗಈੜ͢ΔͱҾ໊͕ṖIPHF7JFXTFU0O$IBOHF4UBUF OFX'VODUJPO'MPBU 'MPBU 'MPBU *OUFHFS *OUFHFS 6OJU \!0WFSSJEFQVCMJD6OJUJOWPLF 'MPBUB'MPBU 'MPBUB'MPBU 'MPBUB'MPBU *OUFHFSJOUFHFS *OUFHFSJOUFHFS\SFUVSOOVMM^^⧞ӑᥨҷᝪҲӵӘәǘ
$BMMCBDL IPHF7JFXPO$IBOHF4UBUF\䖕 GM'MPBU GM'MPBU GM'MPBU J*OU J*OU\⧞ಌ⇰ᘻҿӶӉᐠᡔൻ GVODUJPOT ^^⋆ ,PUMJO Ͱ *OUFOTJPO ͨ࣌͠ͷҾ໊͕ʜ+BWB ӘӒҷӲӴ㗾ӕӔӍӉǘ㮹
$BMMCBDL ʹ͍ͭͯࢥ͏͜ͱ ⋆ ؔϦςϥϧͰϦεφʔύλʔϯഉআͰ͖Δ⋆ ϦεφʔύλʔϯΛͬͨ΄͏͕ϝϯςφϯε͍͢͠έʔε͍ͬͺ͍͋Γͦ͏ෳͷҾ͕ଘࡏ͢Δͱ͖ଟͷίʔϧόοΫؔΛ࣋ͭͱ͖⋆ ٯʹར༻ͨ͠ํ͕ྑͦ͞͏ͳέʔε͋Γͦ͏ඞͣఆٛ͢Δඞཁͷͳ͍ίʔϧόοΫ͕͋Δ࣌FH(FTUVSF%FUFDUPS(FTUVSF-JTUFOFS ͷ μϒϧλοϓͷݕ͚ͩར༻͍ͨ͠ɺͱ͔
ࢀߟจݙ ⋆ +BWB ͔Βͷར༻ΛࢹʹೖΕͨ ,PUMJO ίʔυͰԿΛ͢Δ͖͔2JJUBIUUQRJJUBDPNKNBUTVJUFNTDCBBDCDCG⋆ +BWB,PUMJO ࠞ߹ϓϩδΣΫτͰؾΛ͚͍ͭͯΔ͜ͱɻIUUQMWMBIBUFOBCMPHDPNFOUSZ⋆ ,PUMJO ͰίʔϧόοΫ2JJUBIUUQRJJUBDPN""LJSB!HJUIVCJUFNTFCBBFFECED