Slide 1

Slide 1 text

߹ಉձࣾ%..DPN$50ࣨ੉ށ༏೭  %SPJE,BJHJ-JUF .%$ͷ಺෦࣮૷͔ΒֶͿ දݱྗͷߴ͍7JFXͷ࡞Γํ

Slide 2

Slide 2 text

X © DMM.com w ੉ށ༏೭ !TFUP@IJ  w ߹ಉձࣾ%..DPN$50ࣨࣄۀࢧԉνʔϜ w ిࢠॻ੶ࣄۀ෦ͷ"OESPJEΞϓϦ։ൃͷࢧԉத w .BUFSJBM%FTJHOେ޷͖ w ޷͖ͳ"1*͸$BOWBTTBWFͱ7JFX(SPVQMBZPVU ࣗݾ঺հ

Slide 3

Slide 3 text

X © DMM.com ηογϣϯͷ໨ඪͱΰʔϧ

Slide 4

Slide 4 text

X © DMM.com දݱྗͷߴ͍7JFXΛ࡞ΕΔΑ͏ʹͳΔ w 7JFXͷ಺෦࣮૷Λ஌ΓϕετϓϥΫςΟεΛ஌Δ w ඳըɺϨΠΞ΢τ w Ξχϝʔγϣϯ w 7JFXͷτϥϒϧʹରॲͰ͖ΔྗΛ਎ʹ͚ͭΔ w 7JFXΛਖ਼͘͠࢖ͬͯτϥϒϧΛݮΒ͢ w ࣗ෼ͷҙਤ͠ͳ͍ಈ࡞ͷݪҼΛௐࠪͰ͖Δ ηογϣϯͷ໨ࢦ͢΋ͷ

Slide 5

Slide 5 text

X © DMM.com w GQTΛҡ࣋͢Δ͜ͱ͸ͱͯ΋ॏཁ w ࣮૷Λ޻෉͢Δඞཁ͕͋Δ w ϨΠΞ΢τॲཧ͸ॏ͍ w ඳը͸ॏ͘ͳ͍ w NFBTVSFͰͷ7JFXͷαΠζΛܭࢉ͢ΔͨΊ w ෳࡶͳߏ଄ͩͱߋʹॏ͍ w Ξχϝʔγϣϯʹ͸5SBOTJUJPOͱ"OJNBUPS͕ෆՄܽ w 5SBOTJUJPOͰͭͷঢ়ଶؒΛ݁Ϳ w 7BMVF"OJNBUPS 0CKFDU"OJNBUPS FUDʜ 7JFXͷ࣮૷Ͱେ੾ͳ͜ͱ

Slide 6

Slide 6 text

X © DMM.com ηογϣϯͷྲྀΕ w .BUFSJBM4IBQF%SBXBCMF w %SBXBCMFͷجૅ w .BUFSJBM4IBQF%SBXBCMFͷ࢓૊Έͱ࢖͍ํ w 4IBEPXͷ࣮૷ w &YUFOEFE'"#ͱ#PUUPN"QQ#BS w จࣈαΠζΛม͑ΔΞχϝʔγϣϯͷ࣮૷ w #PUUPN/BWJHBUJPOͱ5FYU'JFME w 7JFXͷαΠζΛม͑Δ࣮૷ w &YUFOEFE'"#ͱ$IJQT

Slide 7

Slide 7 text

X © DMM.com ஌ͬͯ࢖͏ .BUFSJBM4IBQF%SBXBCMF

Slide 8

Slide 8 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMFͱ͸

Slide 9

Slide 9 text

X © DMM.com w .%$ʹؚ·ΕΔίϯϙʔωϯτ w 7JFXͷ#BDLHSPVOEͱͯ͠࢖͏ w ֯ΛΧελϚΠζͰ͖Δ w ݟͨ໨ɺαΠζ w ྠֲͷΧελϚΠζ͕Ͱ͖Δ w ྠֲͷਤܗΛมߋͰ͖Δ w ԑऔΓʹͰ͖Δ w 4IBEPXͷඳը͕Ͱ͖Δ w 'SBNFXPSLͷ7JFXΑΓ΋ෳࡶͳ4IBEPX΋Մೳ .BUFSJBM4IBQF%SBXBCMFͱ͸

Slide 10

Slide 10 text

X © DMM.com

Slide 11

Slide 11 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMF IUUQTNBUFSJBMJPEFTJHOTIBQFBCPVUTIBQFIUN

Slide 12

Slide 12 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMFͷ4IBEPX 'SBNFXPSLͷ7JFX .BUFSJBM4IBQF%SBXBCMF ԁɺପԁ ˓ ˓ ۣܗɺؙۣ֯ܗ ˓ ˓ ϕδΤۂઢؚ͕·ΕΔͱʷ ತਤܗ ˓ ˓ ϕδΤۂઢؚ͕·ΕΔͱʷ ඇತਤܗ ʷ "1*͔Β˓ ˓ ϕδΤۂઢؚ͕·ΕΔͱʷ

Slide 13

Slide 13 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMFͷ4IBEPX

Slide 14

Slide 14 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMFͷ4IBEPX

Slide 15

Slide 15 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMFͷ಺෦࣮૷

Slide 16

Slide 16 text

X © DMM.com %SBXBCMFͷجૅ

Slide 17

Slide 17 text

X © DMM.com %SBXBCMFେϙΠϯτ  $POTUBOU4UBUFͰঢ়ଶΛ࣋ͭ  TFU#PVOET ͰαΠζΛܾΊΔ  ESBX Ͱඳը͢Δ %SBXBCMFͷجૅ

Slide 18

Slide 18 text

X © DMM.com w 4UBUF-JTU%SBXBCMFͱ͸ผ෺ w %SBXBCMFͷঢ়ଶΛอ࣋͢Δ w ΞϧϑΝ஋ɺ$PMPS4UBUF-JTUɺ5JOU w ࣗ࡞%SBXBCMFͰ͸$POTUBOU4UBUF΋ࣗ࡞͢Δ͜ͱ͕ଟ͍ • MaterialShapeDrawableState extends ConstantState w $POTUBOU4UBUFOFX%SBXBCMF Ͱ࡞੒ͨ͠%SBXBCMFؒͰڞ༗͞ΕΔ w 3FTPVSDFTHFU%SBXBCMFͷ಺෦Ͱ࢖ΘΕΔ w NVUBUF Ͱঢ়ଶ͕ಠཱ͢Δ %SBXBCMF$POTUBOU4UBUF

Slide 19

Slide 19 text

X © DMM.com ิ଍ɿ%SBXBCMF$POTUBOU4UBUFͱNVUBUF Drawable ConstantState

Slide 20

Slide 20 text

X © DMM.com ิ଍ɿ%SBXBCMF$POTUBOU4UBUFͱNVUBUF Drawable ConstantState ConstantState.newDrawable

Slide 21

Slide 21 text

X © DMM.com ิ଍ɿ%SBXBCMF$POTUBOU4UBUFͱNVUBUF Drawable ConstantState Drawable

Slide 22

Slide 22 text

X © DMM.com ิ଍ɿ%SBXBCMF$POTUBOU4UBUFͱNVUBUF Drawable ConstantState Drawable Drawable.mutate

Slide 23

Slide 23 text

X © DMM.com ิ଍ɿ%SBXBCMF$POTUBOU4UBUFͱNVUBUF Drawable ConstantState Drawable ConstantState

Slide 24

Slide 24 text

X © DMM.com w $BOWBTʹͲͷ͘Β͍ͷαΠζͰඳը͢Δ͔ w TFU#PVOET w 7JFXଆ͸JOUSJOTJD8JEUI)FJHIUΛࢀߟʹ͢Δ w #JUNBQ%SBXBCMF͸ը૾ͷղ૾౓ w 7FDUPS%SBXBCMF͸xmlͷandroid:widthandroid:height • σϑΥϧτ஋͸ -1 w JOUSJOTJDͷ஋ͳ͠ %SBXBCMFTFU#PVOET

Slide 25

Slide 25 text

X © DMM.com w 7JFXͳͲ͔Βݺ͹ΕΔ w $BOWBT΁ͷඳըॲཧΛߦ͏ w JOWBMJEBUF4FMG Ͱ$BMMCBDLʹ࠶ඳըΛཁٻͰ͖Δ w $BMMCBDL͸ଟ͘ͷ৔߹7JFX %SBXBCMFESBX

Slide 26

Slide 26 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMFͷ಺෦࣮૷

Slide 27

Slide 27 text

X © DMM.com • MaterialShapeDrawableState • extends ConstantState w ShapeAppearanceModel w ͲΜͳܗঢ়ͷ%SBXBCMF͔ͷ৘ใ • ShapePathProvider w ShapeAppearanceModelΛPathʹม׵͢Δ ొ৔ਓ෺

Slide 28

Slide 28 text

X © DMM.com w ܗঢ়ͷ஋Ϋϥε w 4IBQFBCMF*NBHF7JFXͳͲͰ΋࢖ΘΕΔ w ลͱ֯ͷΧελϚΠζ͕Ͱ͖Δ w TFU"MM$PSOFS4J[FT TFU5PQ-FGU$PSOFS4J[F FUD w TFU"MM$PSOFST TFU5PQ-FGU$PSOFS FUD w TFU"MM&EHFT TFU5PQ&EHF FUD 4IBQF"QQFBSBODF.PEFM

Slide 29

Slide 29 text

X © DMM.com ߏ੒ MaterialShapeDrawable MaterialShapeDrawableState ShapeAppearanceModel

Slide 30

Slide 30 text

X © DMM.com 4IBQF"QQFBSBODF.PEFM ShapeAppearanceModel CornerTreatment topLeftCorner topRightCorner bottomRightCorner bottomLeftCorner CornerSize topLeftCornerSize topRightCornerSize bottomRightCornerSize bottomLeftCornerSize EdgeTreatment topEdge rightEdge bottomEdge leftEdge

Slide 31

Slide 31 text

X © DMM.com MaterialShapeDrawable.draw ඳըͷ࢓૊Έ MaterialShapeDrawable .calculateShapePath / calculatePath ShapePathProvider .calculatePath MaterialShapeDrawable .drawFillShape / drawStrokeShape Canvas.drawPath / drawRoundRect ShapeAppearanceModel Path Path Path

Slide 32

Slide 32 text

X © DMM.com #PUUPN"QQ#BS

Slide 33

Slide 33 text

X © DMM.com MaterialShapeDrawable.setInterpolation( float interpolation) EdgeTreatment.getEdgePath( float length, float center, float interpolation, @NonNull ShapePath shapePath) CornerTreatment.getCornerPath( @NonNull ShapePath shapePath, float angle, float interpolation, @NonNull RectF bounds, @NonNull CornerSize size) #PUUPN"QQ#BS

Slide 34

Slide 34 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMFΛ࢖͏

Slide 35

Slide 35 text

X © DMM.com

Slide 36

Slide 36 text

X © DMM.com val model = ShapeAppearanceModel.Builder() .setAllCornerSizes(AbsoluteCornerSize(cornerSize)) .setBottomEdge( SpeechBalloonBottomEdgeTreatment(arrowHeight, arrowRight) ) .build() 4IBQF"QQFBSBODF.PEFMΛ࡞Δ

Slide 37

Slide 37 text

X © DMM.com override fun getEdgePath( length: Float, center: Float, interpolation: Float, shapePath: ShapePath ) { shapePath.lineTo(arrowRight, 0f) shapePath.lineTo(arrowRight, -arrowHeight) shapePath.lineTo(arrowRight + arrowHeight, 0f) shapePath.lineTo(length, 0f) } &EHF5SFBUNFOUΛ࣮૷͢Δ

Slide 38

Slide 38 text

X © DMM.com val background = MaterialShapeDrawable(model).apply { fillColor = ColorStateList.valueOf(Color.WHITE) this.elevation = elevation setPadding(padding, padding, padding, padding) } speechBalloon.background = background .BUFSJBM4IBQF%SBXBCMFΛ࡞Δ

Slide 39

Slide 39 text

X © DMM.com

Slide 40

Slide 40 text

X © DMM.com w ԁܗͱۣܗϕʔεͰͳ͍ਤܗ͸දݱ͕೉͍͠ w ࡾ֯ܗɺ੕ܗͳͲ w 4IBQF"QQFBSBODF.PEFMͷ੍ݶ w ֎ଆʹ͸Έग़͢ਤܗͷ৔߹ w ਌7JFXͷDMJQ$IJMESFOGBMTFΛ͢Δ w *OTFU%SBXBCMFͰғΉ w 4IBEPXΛΑ͘ݟΔͱૈ͍ w ඇತਤܗͰ͸஫ҙ ஫ҙ఺

Slide 41

Slide 41 text

X © DMM.com .BUFSJBM4IBQF%SBXBCMF ·ͱΊ

Slide 42

Slide 42 text

X © DMM.com w 7JFXͷഎܠ༻%SBXBCMF w ࣗ༝౓ͷߴ͍σβΠϯΛදݱͰ͖Δ w 4IBQF"QQFBSBODF.PEFMΛ࢖͏ w ԁܗͱۣܗϕʔεͰͳ͍ਤܗ͸දݱ͕೉͍͠ w 4IBEPXΛඳըͰ͖Δ w "1*ະຬͰ͸'SBNFXPSLͷ7JFXΑΓ΋ෳࡶͳ4IBEPXΛඳը .BUFSJBM4IBQF%SBXBCMF·ͱΊ

Slide 43

Slide 43 text

X © DMM.com 4IBEPXͷ࣮ݱํ๏

Slide 44

Slide 44 text

X © DMM.com '"#ɾ&YUFOEFE'"#

Slide 45

Slide 45 text

X © DMM.com

Slide 46

Slide 46 text

X © DMM.com w 7JFXͷྠֲ৘ใΛఏڙ͢ΔΫϥε "1*d  w HFU0VUMJOFͰྠֲઃఆ w 4IBEPXͷܭࢉͳͲʹ࢖ΘΕΔ w ͍͔࣮ͭ͘૷ࡁΈΠϯελϯε͕͋Δ • BACKGROUND • BOUNDS • PADDED_BOUNDS • 7JFXͷॳظ஋͸BACKGROUND • View.background.getOutline 7JFX0VUMJOF1SPWJEFS

Slide 47

Slide 47 text

X © DMM.com public void getOutline(@NonNull Outline outline) { if (drawableState.shadowCompatMode == SHADOW_COMPAT_MODE_ALWAYS) { // Don't draw the native shadow if we're always rendering with compat shadow. return; } if (isRoundRect()) { float radius = getTopLeftCornerResolvedSize(); outline.setRoundRect(getBounds(), radius); return; } calculatePath(getBoundsAsRectF(), path); if (path.isConvex() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { outline.setConvexPath(path); } } .BUFSJBM4IBQF%SBXBCMFHFU0VUMJOF

Slide 48

Slide 48 text

X © DMM.com public void getOutline(@NonNull Outline outline) { if (drawableState.shadowCompatMode == SHADOW_COMPAT_MODE_ALWAYS) { // Don't draw the native shadow if we're always rendering with compat shadow. return; } if (isRoundRect()) { float radius = getTopLeftCornerResolvedSize(); outline.setRoundRect(getBounds(), radius); return; } calculatePath(getBoundsAsRectF(), path); if (path.isConvex() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { outline.setConvexPath(path); } } .BUFSJBM4IBQF%SBXBCMFHFU0VUMJOF .BUFSJBM4IBQF%SBXBCMFͰTIBEPXΛඳը͢Δઃఆ ˠ0VUMJOFΛઃఆ͠ͳ͍ 'SBNFXPSLଆͷTIBEPXͳ͠

Slide 49

Slide 49 text

X © DMM.com public void getOutline(@NonNull Outline outline) { if (drawableState.shadowCompatMode == SHADOW_COMPAT_MODE_ALWAYS) { // Don't draw the native shadow if we're always rendering with compat shadow. return; } if (isRoundRect()) { float radius = getTopLeftCornerResolvedSize(); outline.setRoundRect(getBounds(), radius); return; } calculatePath(getBoundsAsRectF(), path); if (path.isConvex() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { outline.setConvexPath(path); } } .BUFSJBM4IBQF%SBXBCMFHFU0VUMJOF %SBXBCMF͕3PVOE3FDU ˠ0VUMJOFTFU3PVOE3FDU %SBXBCMF͕3PVOE3FDU ˠ0VUMJOFTFU3PVOE3FDU

Slide 50

Slide 50 text

X © DMM.com public void getOutline(@NonNull Outline outline) { if (drawableState.shadowCompatMode == SHADOW_COMPAT_MODE_ALWAYS) { // Don't draw the native shadow if we're always rendering with compat shadow. return; } if (isRoundRect()) { float radius = getTopLeftCornerResolvedSize(); outline.setRoundRect(getBounds(), radius); return; } calculatePath(getBoundsAsRectF(), path); if (path.isConvex() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { outline.setConvexPath(path); } } .BUFSJBM4IBQF%SBXBCMFHFU0VUMJOF %SBXBCMFͷྠֲͷ1BUI͕ತਤܗ Path.isConvex()  ·ͨ͸"1*Ҏ্ ˠ0VUMJOFTFU$POWFY1BUI

Slide 51

Slide 51 text

X © DMM.com public void getOutline(@NonNull Outline outline) { if (drawableState.shadowCompatMode == SHADOW_COMPAT_MODE_ALWAYS) { // Don't draw the native shadow if we're always rendering with compat shadow. return; } if (isRoundRect()) { float radius = getTopLeftCornerResolvedSize(); outline.setRoundRect(getBounds(), radius); return; } calculatePath(getBoundsAsRectF(), path); if (path.isConvex() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { outline.setConvexPath(path); } } .BUFSJBM4IBQF%SBXBCMFHFU0VUMJOF ͦΕҎ֎ ˠ0VUMJOFΛઃఆ͠ͳ͍ 'SBNFXPSLଆͷTIBEPXͳ͠

Slide 52

Slide 52 text

X © DMM.com public void getOutline(@NonNull Outline outline) { if (drawableState.shadowCompatMode == SHADOW_COMPAT_MODE_ALWAYS) { // Don't draw the native shadow if we're always rendering with compat shadow. return; } if (isRoundRect()) { float radius = getTopLeftCornerResolvedSize(); outline.setRoundRect(getBounds(), radius); return; } calculatePath(getBoundsAsRectF(), path); if (path.isConvex() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { outline.setConvexPath(path); } } .BUFSJBM4IBQF%SBXBCMFHFU0VUMJOF %SBXBCMF͕3PVOE3FDU ˠ0VUMJOFTFU3PVOE3FDU %SBXBCMF͕3PVOE3FDU ˠ0VUMJOFTFU3PVOE3FDU

Slide 53

Slide 53 text

X © DMM.com #PUUPN"QQ#BS

Slide 54

Slide 54 text

X © DMM.com ࢀߟࢿྉ IUUQTTQFBLFSEFDLDPNTFUP@IJNEDGBMTFCPUUPNBQQCBSGBMTFTIBEPXGBMTFTIJYJBOGBOHGB

Slide 55

Slide 55 text

X © DMM.com #PUUPN"QQ#BS .BUFSJBM4IBQF%SBXBCMF

Slide 56

Slide 56 text

X © DMM.com  .BUFSJBM4IBQF%SBXBCMFͰTIBEPXΛඳը͢Δઃఆ w ˠ0VUMJOFΛઃఆ͠ͳ͍ 'SBNFXPSLଆͷTIBEPXͳ͠   %SBXBCMF͕3PVOE3FDU w ˠ0VUMJOFTFU3PVOE3FDU  %SBXBCMFͷྠֲͷ1BUI͕ತਤܗ Path.isConvex()  ·ͨ͸"1*Ҏ্ w ˠ0VUMJOFTFU$POWFY1BUI  ͦΕҎ֎ w ˠ0VUMJOFΛઃఆ͠ͳ͍ 'SBNFXPSLଆͷTIBEPXͳ͠ .BUFSJBM4IBQF%SBXBCMFHFU0VUMJOF

Slide 57

Slide 57 text

X © DMM.com 0VUMJOF 04ͷ࣮૷Ͱ͸ #PUUPN"QQ#BSʹ ӨΛ෇͚ΒΕͳ͍

Slide 58

Slide 58 text

X © DMM.com #PUUPN"QQ#BS .BUFSJBM4IBQF%SBXBCMF

Slide 59

Slide 59 text

X © DMM.com ࢖͍෼͚Δ

Slide 60

Slide 60 text

X © DMM.com w 4IBEPXʹࠔ͍ͬͯͳ͍ͳΒؾʹ͠ͳ͍ w 4IBEPXʹࠔͬͨΒ.BUFSJBM4IBQF%SBXBCMFΛࢼ͢ w 04όʔδϣϯ΍ྠֲΛؾʹͤͣTIBEPXΛඳը͢Δ w ͨͩ͠.BUFSJBM4IBQF%SBXBCMFͷྠֲͷදݱʹ͸ݶք͕͋Δ w ԁͱۣܗϕʔεͷਤܗ w .BUFSJBM4IBQF%SBXBCMFͰ΋ղܾͰ͖ͳ͍৔߹͸େม w 4IBEPX3FOEFSFSΛࢀߟʹࣗ࡞͢Δ w PSσβΠϯΛม͑Δ ࢖͍෼͚

Slide 61

Slide 61 text

X © DMM.com ΞχϝʔγϣϯͰ Α͘࢖͏Ϋϥε

Slide 62

Slide 62 text

X © DMM.com 7BMVF"OJNBUPS

Slide 63

Slide 63 text

X © DMM.com w Ξχϝʔγϣϯ༻ͷ஋Λఏڙ͢ΔΫϥε w ࢦఆͨ࣌ؒ͠಺Ͱ͍͍ײ͡ʹ஋ΛมԽͤͯ͘͞ΕΔ w VQEBUF-JTUFOFSͰ஋Λॲཧ͢Δ w ඵؒʹճఔ౓஋ݺ͹ΕΔ w ॏ͍ॲཧΛ͠ͳ͍ʂ w *OUFSQPMBUPSΛ࢖ͬͯมԽྔΛมԽͤ͞Δ͜ͱ͕Ͱ͖Δ 7BMVF"OJNBUPS 7BMVF"OJNBUPS

Slide 64

Slide 64 text

X © DMM.com 7BMVF"OJNBUPS 7BMVF"OJNBUPS ValueAnimator.ofFloat(0f, 100f).apply { duration = 1000L addUpdateListener { animator -> view.translationX = animator.animatedValue as Float } start() }

Slide 65

Slide 65 text

X © DMM.com 0CKFDU"OJNBUPS

Slide 66

Slide 66 text

X © DMM.com w 7BMVF"OJNBUPSΛܧঝͨ͠Ϋϥε w ࢦఆͨ࣌ؒ͠಺Ͱ೚ҙͷϓϩύςΟΛมԽͤ͞Δ w VQEBUF-JTUFOFS͸ඵؒʹճఔ౓஋͕ߋ৽͞ΕΔ w *OUFSQPMBUPSΛ࢖ͬͯมԽྔΛมԽͤ͞Δ͜ͱ͕Ͱ͖Δ w ϓϩύςΟ΁ͷΞΫηε͸ϦϑϨΫγϣϯ 0CKFDU"OJNBUPS

Slide 67

Slide 67 text

X © DMM.com 0CKFDU"OJNBUPS ObjectAnimator.ofFloat(view, “translationX”, 0f, 100f).apply { duration = 1000L start() }

Slide 68

Slide 68 text

X © DMM.com w 7BMVF"OJNBUPS0CKFDU"OJNBUPS ObjectAnimator.ofFloat(view, “translationX”, 0f, 100f).apply { duration = 1000L start() } ValueAnimator.ofFloat(0f, 100f).apply { duration = 1000L addUpdateListener { animator -> view.translationX = animator.animatedValue as Float } start() }

Slide 69

Slide 69 text

X © DMM.com w JOWBMJEBUF w ϝΠϯεϨου͔Β͔͠ݺ΂ͳ͍ w ͙͢ʹ࠶ඳը͢Δ͜ͱΛཁٻ͢Δ w QPTU*OWBMJEBUF w αϒεϨου͔Β΋ݺ΂Δ w )BOEMFSܦ༝Ͱ࠶ඳըΛཁٻ͢Δ w QPTU*OWBMJEBUF0O"OJNBUJPO w αϒεϨου͔Β΋ݺ΂Δ w ࣍ϑϨʔϜͰ࠶ඳը͢ΔΑ͏ʹཁٻ͢Δ ิ଍ɿ7JFX࠶ඳըϝιου࢖͍෼͚

Slide 70

Slide 70 text

X © DMM.com 5SBOTJUJPO

Slide 71

Slide 71 text

X © DMM.com w ϨΠΞ΢τલޙͷঢ়ଶؒΛ͍͍ײ͡ʹΞχϝʔγϣϯͰ݁Ϳ w Ξχϝʔγϣϯʹ͸"OJNBUPS͕࢖ΘΕΔ͜ͱ͕ଟ͍ w ࢖͍ํ͸؆୯ w σϑΥϧτͰ'BEFͱ$IBOHF#PVOET͕ಈ͘ w ҰൠతͳΞχϝʔγϣϯ͸࣮૷ࡁ w 'BEF 4MJEF $IBOHF#PVOET w ࣗ෼Ͱ࣮૷͢Δ͜ͱ΋ग़དྷΔ 5SBOTJUJPO TransitionManager.beginDelayedTransition(viewGroup) view.visibility = View.GONE

Slide 72

Slide 72 text

X © DMM.com w 7BMVF"OJNBUPS w Ξχϝʔγϣϯ༻ͷ஋Λఏڙ͢Δ w 0CKFDU"OJNBUPS w Ξχϝʔγϣϯ༻ʹϓϩύςΟΛมߋ͢Δ w 5SBOTJUJPO w ϨΠΞ΢τલޙͷঢ়ଶΛ͍͍ײ͡ʹΞχϝʔγϣϯͰ݁Ϳ Ξχϝʔγϣϯͷલఏ஌ࣝ

Slide 73

Slide 73 text

X © DMM.com จࣈαΠζΛม͑Δ Ξχϝʔγϣϯ

Slide 74

Slide 74 text

X © DMM.com #PUUPN/BWJHBUJPO

Slide 75

Slide 75 text

X © DMM.com

Slide 76

Slide 76 text

X © DMM.com w "DUJWF༻ͱ*OBDUJWF༻ͷͭͷ5FYU7JFX͕͋Δ w 5SBOTJUJPOͰঢ়ଶΛܨ͙ w 5FYU4DBMFFYUFOET5SBOTJUJPO w 7BMVF"OJNBUPSͰ஋ΛมԽ w αΠζมߋʹ࢖͏ͷ͸TDBMF9ͱTDBMF: w Ξχϝʔγϣϯதʹ࠶ϨΠΞ΢τΛൃੜͤ͞ͳ͍ͨΊ w TFU4DBMF9ͱTFU4DBMF:͸࠶ϨΠΞ΢τ͕ൃੜ͠ͳ͍ w TFU5FYU4J[F͸࠶ϨΠΞ΢τ͕ൃੜ͢Δ ࣮૷ͷ࢓૊Έ

Slide 77

Slide 77 text

X © DMM.com 1BHF ࣮૷ͷ࢓૊Έ 1BHF *O"DUJWFɿ 7JTJCMF "DUJWFɿ*OWJTJCMF

Slide 78

Slide 78 text

X © DMM.com 1BHF ࣮૷ͷ࢓૊Έ *O"DUJWFɿ 7JTJCMF "DUJWFɿ*OWJTJCMF 4DBMFˢ

Slide 79

Slide 79 text

X © DMM.com *OWJTJCMF *OWJTJCMF 1BHF ࣮૷ͷ࢓૊Έ *O"DUJWFɿ "DUJWFɿ

Slide 80

Slide 80 text

X © DMM.com *OWJTJCMF 1BHF ࣮૷ͷ࢓૊Έ *O"DUJWFɿ "DUJWFɿ7JTJCMF

Slide 81

Slide 81 text

X © DMM.com  5FYU'JFME 5FYU*OQVU-BZPVU

Slide 82

Slide 82 text

X © DMM.com

Slide 83

Slide 83 text

X © DMM.com 7JFXͰͳ͍ 5FYU*OQVU-BZPVU͕ඳը

Slide 84

Slide 84 text

X © DMM.com w &EJU5FYUͷIJOU͸࢖Θͳ͍ w 5FYU*OQVU-BZPVU͕$BOWBTʹIJOUΛඳը w $PMMBQTJOH5FYU)FMQFS w 7BMVF"OJNBUPS $BOWBTESBX5FYU w ঃʑʹςΩετΛখ͘͞ඳը͍ͯ͠Δ w 1BJOUTFU5FYU4J[F w "1*ҎԼͰ͸ύϑΥʔϚϯεͷؔ܎Ͱ#JUNBQΛॖখ w $PMMBQTJOH5PPMCBS-BZPVU΋$PMMBQTJOH5FYU)FMQFSΛ࢖͏ ࣮૷ͷ࢓૊Έ

Slide 85

Slide 85 text

X © DMM.com w ࠶ϨΠΞ΢τΛൃੜͤ͞ͳ͍ͨΊ w IJOUͷ5FYU7JFXΛҠಈͤ͞Δͱ࠶ϨΠΞ΢τ͕ൃੜ͢Δ w ϑΥʔΧε͕౰ͨΔͨͼʹ࠶ϨΠΞ΢τ͢Δͱίετ͕ߴ͍ w จࣈೖྗதʹ࠶ϨΠΞ΢τΛ͢Δͱ ҙਤ͠ͳ͍ಈ࡞Λ͢ΔՄೳੑ΋ ͳͥʁ

Slide 86

Slide 86 text

X © DMM.com ࢖͍෼͚Δ

Slide 87

Slide 87 text

X © DMM.com w ࠶ϨΠΞ΢τ͕ى͜Δˠ5SBOTJUJPO w 5SBOTJUJPO಺Ͱ͸࠶ϨΠΞ΢τΛҾ͖ى͜͞ͳ͍Α͏஫ҙ w ࠶ϨΠΞ΢τ͕ى͜Βͳ͍ىͨ͘͜͠ͳ͍ˠ$BOWBT w ϝϯςφϯε͕େมʹͳΔͷͰ஫ҙ ࢖͍෼͚

Slide 88

Slide 88 text

X © DMM.com 7JFXͷαΠζΛม͑Δ

Slide 89

Slide 89 text

X © DMM.com &YUFOEFE'MPBUJOH"DUJPO#VUUPO

Slide 90

Slide 90 text

X © DMM.com

Slide 91

Slide 91 text

X © DMM.com w &YUFOEFE'"#FYUFOE TISJOL  w ಺෦తʹ͸0CKFDU"OJNBUPS w MBZPVU1BSBNTXJEUIΛมߋ ຖճSFRVFTU-BZPVU  w ॏ͍ w 7JFX(SPVQͰͳ͍ͷͰ5SBOTJUJPO͸࢖͑ͳ͍ w ࠶ϨΠΞ΢τҎ֎͸Ξχϝʔγϣϯ͢Δํ๏͕ͳ͍ w ঢ়ଶͷࠩ෼͕େ͖͍ͷͰΞχϝʔγϣϯ͠ͳ͍ͱ఻ΘΒͳ͍ w ༨ஊɿ.PUJPO4USBUFHZपΓ͸ಡΈԠ͑ͷ͋Δίʔυʂ Ξχϝʔγϣϯ෇͖αΠζมߋ

Slide 92

Slide 92 text

X © DMM.com $IJQT

Slide 93

Slide 93 text

X © DMM.com

Slide 94

Slide 94 text

X © DMM.com

Slide 95

Slide 95 text

X © DMM.com w $IJQ͸3FDZDMFS7JFXͳͲͰΑ͘࢖ΘΕΔ w Ξχϝʔγϣϯ࣌ʹ࠶ϨΠΞ΢τΛֻ͚Δ 3FDZDMFS7JFXͷཁૉͷ࠶ϨΠΞ΢τ w ίετ͕ඇৗʹߴ͍ w ࠩ෼͕গͳ͍ͷͰΞχϝʔγϣϯ͠ͳͯ͘΋఻ΘΔ w Ξχϝʔγϣϯ͸ઈରͷਖ਼ղͰ͸ͳ͍ Ξχϝʔγϣϯͤͨ͞ํ͕ྑ͍ʁ

Slide 96

Slide 96 text

X © DMM.com JTTVF IUUQTHJUIVCDPNNBUFSJBMDPNQPOFOUTNBUFSJBMDPNQPOFOUTBOESPJEJTTVFT

Slide 97

Slide 97 text

X © DMM.com ࢖͍෼͚Δ

Slide 98

Slide 98 text

X © DMM.com w 5SBOTJUJPOͷ$IBOHF#PVOET w ࠷΋Ұൠతͳํ๏ w -JTUͷཁૉʹͳΓ͏Δ7JFX w SFRVFTU-BZPVUΛ͋·Γݺ͹ͳ͍ w 7JTJCJMJUZͷ੾Γସ͚͑ͩͰྑ͍͔΋ w ߴ͍දݱྗ͕ඞཁͳ7JFX w SFRVFTU-BZPVUΛͨ͘͞ΜݺͿ͜ͱ΋ߟ͑Δ w ϑϨʔϜམͪͷՄೳੑΛߟ͓͑ͯ͘ w ࢖͍෼͚

Slide 99

Slide 99 text

X © DMM.com ·ͱΊ

Slide 100

Slide 100 text

X © DMM.com දݱྗͷߴ͍7JFXΛ࡞ΕΔΑ͏ʹͳΔ w 7JFXͷ಺෦࣮૷Λ஌ΓɺϕετϓϥΫςΟεΛ஌Δ w ඳըɺϨΠΞ΢τ w Ξχϝʔγϣϯ w 7JFXͷτϥϒϧʹରॲͰ͖ΔྗΛ਎ʹ͚ͭΔ w 7JFXΛਖ਼͘͠࢖ͬͯτϥϒϧΛݮΒ͢ w ࣗ෼ͷҙਤ͠ͳ͍ಈ࡞ͷݪҼΛௐࠪͰ͖Δ ηογϣϯͷ໨ࢦ͢΋ͷ

Slide 101

Slide 101 text

X © DMM.com w GQTΛҡ࣋͢Δ͜ͱ͸ͱͯ΋ॏཁ w ࣮૷Λ޻෉͢Δඞཁ͕͋Δ w ϨΠΞ΢τॲཧ͸ॏ͍ w ඳը͸ॏ͘ͳ͍ w NFBTVSFͰͷ7JFXͷαΠζΛܭࢉ͢ΔͨΊ w ෳࡶͳߏ଄ͩͱߋʹॏ͍ w Ξχϝʔγϣϯʹ͸5SBOTJUJPOͱ"OJNBUPS͕ෆՄܽ w 5SBOTJUJPOͰͭͷঢ়ଶؒΛ݁Ϳ w 7BMVF"OJNBUPS 0CKFDU"OJNBUPS FUDʜ 7JFXͷ࣮૷Ͱେ੾ͳ͜ͱ

Slide 102

Slide 102 text

X © DMM.com w .BUFSJBM%FTJHO w IUUQTNBUFSJBMJPEFTJHO w .BUFSJBM$PNQPOFOUTGPS"OESPJE w IUUQTHJUIVCDPNNBUFSJBMDPNQPOFOUTNBUFSJBMDPNQPOFOUT BOESPJE w αϯϓϧ w IUUQTHJUIVCDPNIJSPZVLJTFUPESPJELBJHJTBNQMF ࢀߟ63-

Slide 103

Slide 103 text

׬