package Ġcom . ang cy o . u ic ore . component Ċ Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . N ine Patch Ċ import Ġandroid . graphics . drawable . N ine Patch Drawable Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ Ċ class ĠN ine Patch Builder Ġ{ ĊĊĠĠĠ Ġvar Ġwidth : ĠInt ĊĠĠĠ Ġvar Ġheight : ĠInt ĊĠĠĠ Ġvar Ġbitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġresources : ĠResources ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġx Regions Ġ= ĠArrayList < Int >() ĊĠĠĠ Ġprivate Ġval Ġy Regions Ġ= ĠArrayList < Int >() ĊĊĠĠĠ Ġconstructor ( resources : ĠResources ?, Ġbitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġbitmap . width ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġbitmap . height ĊĠĠĠĠĠĠĠ Ġthis . bitmap Ġ= Ġbitmap ĊĠĠĠĠĠĠĠ Ġthis . resources Ġ= Ġresources ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġthis . height Ġ= Ġheight ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd X Region ( x : ĠInt , Ġwidth : ĠInt ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x ) ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x Ġ+ Ġwidth ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd X Region Points ( x 1 : ĠInt , Ġx 2 : ĠInt ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x 1 ) ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x 2 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd X Region ( x Percent : ĠFloat , Ġwidth Percent : ĠFloat ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx tmp Ġ= Ġ( x Percent Ġ* Ġwidth ). toInt () ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x tmp ) ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x tmp Ġ+ Ġ( width Percent Ġ* Ġwidth ). toInt ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd X Region Points ( x 1 Percent : ĠFloat , Ġx 2 Percent : ĠFloat ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġx Regions . add (( x 1 Percent Ġ* Ġwidth ). toInt ()) ĊĠĠĠĠĠĠĠ Ġx Regions . add (( x 2 Percent Ġ* Ġwidth ). toInt ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd X Center ed Region ( width : ĠInt ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ(( this . width Ġ- Ġwidth ) Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x ) ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x Ġ+ Ġwidth ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd X Center ed Region ( width Percent : ĠFloat ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġ( width Percent Ġ* Ġwidth ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ(( this . width Ġ- Ġwidth ) Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x ) ĊĠĠĠĠĠĠĠ Ġx Regions . add ( x Ġ+ Ġwidth ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Y Region ( y : ĠInt , Ġheight : ĠInt ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y ) ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Y Region Points ( y 1 : ĠInt , Ġy 2 : ĠInt ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y 1 ) ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y 2 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Y Region ( y Percent : ĠFloat , Ġheight Percent : ĠFloat ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġy tmp Ġ= Ġ( y Percent Ġ* Ġheight ). toInt () ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y tmp ) ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y tmp Ġ+ Ġ( height Percent Ġ* Ġheight ). toInt ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Y Region Points ( y 1 Percent : ĠFloat , Ġy 2 Percent : ĠFloat ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġy Regions . add (( y 1 Percent Ġ* Ġheight ). toInt ()) ĊĠĠĠĠĠĠĠ Ġy Regions . add (( y 2 Percent Ġ* Ġheight ). toInt ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Y Center ed Region ( height : ĠInt ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ(( this . height Ġ- Ġheight ) Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y ) ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Y Center ed Region ( height Percent : ĠFloat ): ĠN ine Patch Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ( height Percent Ġ* Ġheight ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ(( this . height Ġ- Ġheight ) Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y ) ĊĠĠĠĠĠĠĠ Ġy Regions . add ( y Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Chunk (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Regions . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Regions . add ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Regions . add ( width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y Regions . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Regions . add ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Regions . add ( height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/* Ġexample Ġcode Ġfrom Ġa Ġan w ser Ġabove ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġ 9 Ġpatch Ġsegment Ġis Ġnot Ġa Ġsolid Ġcolor . ĊĠĠĠĠĠĠĠ Ġprivate Ġstatic Ġfinal Ġint ĠNO _ COLOR Ġ= Ġ 0 x 0 0 0 0 0 0 0 1 ; ĊĠĠĠĠĠĠĠ ĠByteBuffer Ġbuffer Ġ= ĠByteBuffer . allocate ( 5 6 ). order ( Byte Order . native Order ()); ĊĠĠĠĠĠĠĠ Ġ// was Ġtranslated ĊĠĠĠĠĠĠĠ Ġbuffer . put (( byte ) 0 x 0 1 ); ĊĠĠĠĠĠĠĠ Ġ// div x Ġsize ĊĠĠĠĠĠĠĠ Ġbuffer . put (( byte ) 0 x 0 2 ); ĊĠĠĠĠĠĠĠ Ġ// div y Ġsize ĊĠĠĠĠĠĠĠ Ġbuffer . put (( byte ) 0 x 0 2 ); ĊĠĠĠĠĠĠĠ Ġ// color Ġsize ĊĠĠĠĠĠĠĠ Ġbuffer . put (( Ġbyte ) 0 x 0 2 ); ĊĊĠĠĠĠĠĠĠ Ġ// skip ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( 0 ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( 0 ); ĊĊĠĠĠĠĠĠĠ Ġ// padding ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( 0 ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( 0 ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( 0 ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( 0 ); ĊĊĠĠĠĠĠĠĠ Ġ// skip Ġ 4 Ġbytes ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( 0 ); ĊĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( left ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( right ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( top ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( bottom ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( NO _ COLOR ); ĊĠĠĠĠĠĠĠ Ġbuffer . put Int ( NO _ COLOR ); ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer ;*/ ĊĠĠĠĠĠĠĠ Ġval ĠNO _ COLOR Ġ= Ġ 1 Ġ// 0 x 0 0 0 0 0 0 0 1 ; ĊĠĠĠĠĠĠĠ Ġval ĠCOLOR _ SIZE Ġ= Ġ 9 Ġ// could Ġchange , Ġmay Ġbe Ġ 2 Ġor Ġ 6 Ġor Ġ 1 5 Ġ- Ġbut Ġhas Ġno Ġeffect Ġon Ġoutput ĠĊĠĠĠĠĠĠĠ Ġval Ġarray Size Ġ= Ġ 1 Ġ+ Ġ 2 Ġ+ Ġ 4 Ġ+ Ġ 1 Ġ+ Ġx Regions . size Ġ+ Ġy Regions . size Ġ+ ĠCOLOR _ SIZE ĊĠĠĠĠĠĠĠ Ġval Ġbyte Buffer Ġ= ĠByteBuffer . allocate ( array Size Ġ* Ġ 4 ). order ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put ( 1 . to Byte ()) Ġ// was Ġtranslated ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put ( x Regions . size . to Byte ()) Ġ// div isions Ġx ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put ( y Regions . size . to Byte ()) Ġ// div isions Ġy ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put ( COLOR _ SIZE . to Byte ()) Ġ// color Ġsize ĊĊĠĠĠĠĠĠĠ Ġ// skip ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put Int ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// padding Ġ-- Ġalways Ġ 0 Ġ-- Ġleft Ġright Ġtop Ġbottom ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put Int ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// skip ĊĠĠĠĠĠĠĠ Ġbyte Buffer . put Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( rx Ġin Ġx Regions ) Ġbyte Buffer . put Int ( rx ) Ġ// Ġregions Ġleft Ġright Ġleft Ġright Ġ... ĊĠĠĠĠĠĠĠ Ġfor Ġ( ry Ġin Ġy Regions ) Ġbyte Buffer . put Int ( ry ) Ġ// Ġregions Ġtop Ġbottom Ġtop Ġbottom Ġ... ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠCOLOR _ SIZE ) Ġbyte Buffer . put Int ( NO _ COLOR ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbyte Buffer . array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild N ine Patch (): ĠN ine Patch ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchunk Ġ= Ġbuild Chunk () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bitmap Ġ!= Ġnull ) ĠN ine Patch ( bitmap , Ġchunk , Ġnull ) Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠN ine Patch Drawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn ine Patch Ġ= Ġbuild N ine Patch () ĊĠĠĠĠĠĠĠ Ġreturn Ġn ine Patch ?. let Ġ{ ĠN ine Patch Drawable ( resources , Ġit ) Ġ} ĊĠĠĠ Ġ} Ċ }