Android RESideMenu侧滑菜单

参考GitHub 中 RESideMenu https://github.com/romaonthego/RESideMenu https://github.com/kyze8439690/ResideLayout https://github.com/SpecialCyCi/AndroidResideMenu Android仿QQ5.0侧滑菜单ResideMenu 最近项目要做一个QQ5.0的侧滑菜单效果,和传统的侧滑菜单存在着一些差异。想必大家都已经见识过了。 为了不重复发明轮子,先去github上面搜索了一番。 发现了几个类似的,但是还是有一些不同。 下面是搜索到的类似的开源项目。 RESideMenu(ios项目) https://github.com/romaonthego/RESideMenu AndroidResideMenu https://github.com/SpecialCyCi/AndroidResideMenu ResideLayout https://github.com/kyze8439690/ResideLayout 研究了一下这些开源项目的源代码。感觉并不是特别适用于我们自己的项目。所以,我自己又研究了一下。最后的效果如下。当然了,还有很多可以优化的地方,后续再慢慢优化。 我是基于SlidingMenu库进行的二次修改,增加了一些转场动画。 大家对这个库应该比较熟悉,下面是SlidingMenu的github地址。非常感谢Jeremy Feinstein提供的这个库,让广大Android Developers省去了非常多的麻烦。 https://github.com/jfeinstein10/SlidingMenu 备注:SlidingMenu使用了SherlockActionBar这个库,配置起来会比较麻烦,在文章的最后我会把demo上传,供大家下载,减去了大家自己配置项目的麻烦。 我主要修改了2个类,SlidingMenu.java和CustonViewAbove.java,只是增加了一些功能,并没有修改原本的功能。 做了修改的地方,我做了中文注释,其实实现很简单,几行代码而已。推荐大家下载Demo,然后自己调试一下。Demo的下载地址在文章的末尾。 废话不多说,直接上代码,略微有点长。 [?](http://www.open-open.com/lib/view/open1411269966859.html#) <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> <div class="line number26 index25 alt1"> 26 </div> <div class="line number27 index26 alt2"> 27 </div> <div class="line number28 index27 alt1"> 28 </div> <div class="line number29 index28 alt2"> 29 </div> <div class="line number30 index29 alt1"> 30 </div> <div class="line number31 index30 alt2"> 31 </div> <div class="line number32 index31 alt1"> 32 </div> <div class="line number33 index32 alt2"> 33 </div> <div class="line number34 index33 alt1"> 34 </div> <div class="line number35 index34 alt2"> 35 </div> <div class="line number36 index35 alt1"> 36 </div> <div class="line number37 index36 alt2"> 37 </div> <div class="line number38 index37 alt1"> 38 </div> <div class="line number39 index38 alt2"> 39 </div> <div class="line number40 index39 alt1"> 40 </div> <div class="line number41 index40 alt2"> 41 </div> <div class="line number42 index41 alt1"> 42 </div> <div class="line number43 index42 alt2"> 43 </div> <div class="line number44 index43 alt1"> 44 </div> <div class="line number45 index44 alt2"> 45 </div> <div class="line number46 index45 alt1"> 46 </div> <div class="line number47 index46 alt2"> 47 </div> <div class="line number48 index47 alt1"> 48 </div> <div class="line number49 index48 alt2"> 49 </div> <div class="line number50 index49 alt1"> 50 </div> <div class="line number51 index50 alt2"> 51 </div> <div class="line number52 index51 alt1"> 52 </div> <div class="line number53 index52 alt2"> 53 </div> <div class="line number54 index53 alt1"> 54 </div> <div class="line number55 index54 alt2"> 55 </div> <div class="line number56 index55 alt1"> 56 </div> <div class="line number57 index56 alt2"> 57 </div> <div class="line number58 index57 alt1"> 58 </div> <div class="line number59 index58 alt2"> 59 </div> <div class="line number60 index59 alt1"> 60 </div> <div class="line number61 index60 alt2"> 61 </div> <div class="line number62 index61 alt1"> 62 </div> <div class="line number63 index62 alt2"> 63 </div> <div class="line number64 index63 alt1"> 64 </div> <div class="line number65 index64 alt2"> 65 </div> <div class="line number66 index65 alt1"> 66 </div> <div class="line number67 index66 alt2"> 67 </div> <div class="line number68 index67 alt1"> 68 </div> <div class="line number69 index68 alt2"> 69 </div> <div class="line number70 index69 alt1"> 70 </div> <div class="line number71 index70 alt2"> 71 </div> <div class="line number72 index71 alt1"> 72 </div> <div class="line number73 index72 alt2"> 73 </div> <div class="line number74 index73 alt1"> 74 </div> <div class="line number75 index74 alt2"> 75 </div> <div class="line number76 index75 alt1"> 76 </div> <div class="line number77 index76 alt2"> 77 </div> <div class="line number78 index77 alt1"> 78 </div> <div class="line number79 index78 alt2"> 79 </div> <div class="line number80 index79 alt1"> 80 </div> <div class="line number81 index80 alt2"> 81 </div> <div class="line number82 index81 alt1"> 82 </div> <div class="line number83 index82 alt2"> 83 </div> <div class="line number84 index83 alt1"> 84 </div> <div class="line number85 index84 alt2"> 85 </div> <div class="line number86 index85 alt1"> 86 </div> <div class="line number87 index86 alt2"> 87 </div> <div class="line number88 index87 alt1"> 88 </div> <div class="line number89 index88 alt2"> 89 </div> <div class="line number90 index89 alt1"> 90 </div> <div class="line number91 index90 alt2"> 91 </div> <div class="line number92 index91 alt1"> 92 </div> <div class="line number93 index92 alt2"> 93 </div> <div class="line number94 index93 alt1"> 94 </div> <div class="line number95 index94 alt2"> 95 </div> <div class="line number96 index95 alt1"> 96 </div> <div class="line number97 index96 alt2"> 97 </div> <div class="line number98 index97 alt1"> 98 </div> <div class="line number99 index98 alt2"> 99 </div> <div class="line number100 index99 alt1"> 100 </div> <div class="line number101 index100 alt2"> 101 </div> <div class="line number102 index101 alt1"> 102 </div> <div class="line number103 index102 alt2"> 103 </div> <div class="line number104 index103 alt1"> 104 </div> <div class="line number105 index104 alt2"> 105 </div> <div class="line number106 index105 alt1"> 106 </div> <div class="line number107 index106 alt2"> 107 </div> <div class="line number108 index107 alt1"> 108 </div> <div class="line number109 index108 alt2"> 109 </div> <div class="line number110 index109 alt1"> 110 </div> <div class="line number111 index110 alt2"> 111 </div> <div class="line number112 index111 alt1"> 112 </div> <div class="line number113 index112 alt2"> 113 </div> <div class="line number114 index113 alt1"> 114 </div> <div class="line number115 index114 alt2"> 115 </div> <div class="line number116 index115 alt1"> 116 </div> <div class="line number117 index116 alt2"> 117 </div> <div class="line number118 index117 alt1"> 118 </div> <div class="line number119 index118 alt2"> 119 </div> <div class="line number120 index119 alt1"> 120 </div> <div class="line number121 index120 alt2"> 121 </div> <div class="line number122 index121 alt1"> 122 </div> <div class="line number123 index122 alt2"> 123 </div> <div class="line number124 index123 alt1"> 124 </div> <div class="line number125 index124 alt2"> 125 </div> <div class="line number126 index125 alt1"> 126 </div> <div class="line number127 index126 alt2"> 127 </div> <div class="line number128 index127 alt1"> 128 </div> <div class="line number129 index128 alt2"> 129 </div> <div class="line number130 index129 alt1"> 130 </div> <div class="line number131 index130 alt2"> 131 </div> <div class="line number132 index131 alt1"> 132 </div> <div class="line number133 index132 alt2"> 133 </div> <div class="line number134 index133 alt1"> 134 </div> <div class="line number135 index134 alt2"> 135 </div> <div class="line number136 index135 alt1"> 136 </div> <div class="line number137 index136 alt2"> 137 </div> <div class="line number138 index137 alt1"> 138 </div> <div class="line number139 index138 alt2"> 139 </div> <div class="line number140 index139 alt1"> 140 </div> <div class="line number141 index140 alt2"> 141 </div> <div class="line number142 index141 alt1"> 142 </div> <div class="line number143 index142 alt2"> 143 </div> <div class="line number144 index143 alt1"> 144 </div> <div class="line number145 index144 alt2"> 145 </div> <div class="line number146 index145 alt1"> 146 </div> <div class="line number147 index146 alt2"> 147 </div> <div class="line number148 index147 alt1"> 148 </div> <div class="line number149 index148 alt2"> 149 </div> <div class="line number150 index149 alt1"> 150 </div> <div class="line number151 index150 alt2"> 151 </div> <div class="line number152 index151 alt1"> 152 </div> <div class="line number153 index152 alt2"> 153 </div> <div class="line number154 index153 alt1"> 154 </div> <div class="line number155 index154 alt2"> 155 </div> <div class="line number156 index155 alt1"> 156 </div> <div class="line number157 index156 alt2"> 157 </div> <div class="line number158 index157 alt1"> 158 </div> <div class="line number159 index158 alt2"> 159 </div> <div class="line number160 index159 alt1"> 160 </div> <div class="line number161 index160 alt2"> 161 </div> <div class="line number162 index161 alt1"> 162 </div> <div class="line number163 index162 alt2"> 163 </div> <div class="line number164 index163 alt1"> 164 </div> <div class="line number165 index164 alt2"> 165 </div> <div class="line number166 index165 alt1"> 166 </div> <div class="line number167 index166 alt2"> 167 </div> <div class="line number168 index167 alt1"> 168 </div> <div class="line number169 index168 alt2"> 169 </div> <div class="line number170 index169 alt1"> 170 </div> <div class="line number171 index170 alt2"> 171 </div> <div class="line number172 index171 alt1"> 172 </div> <div class="line number173 index172 alt2"> 173 </div> <div class="line number174 index173 alt1"> 174 </div> <div class="line number175 index174 alt2"> 175 </div> <div class="line number176 index175 alt1"> 176 </div> <div class="line number177 index176 alt2"> 177 </div> <div class="line number178 index177 alt1"> 178 </div> <div class="line number179 index178 alt2"> 179 </div> <div class="line number180 index179 alt1"> 180 </div> <div class="line number181 index180 alt2"> 181 </div> <div class="line number182 index181 alt1"> 182 </div> <div class="line number183 index182 alt2"> 183 </div> <div class="line number184 index183 alt1"> 184 </div> <div class="line number185 index184 alt2"> 185 </div> <div class="line number186 index185 alt1"> 186 </div> <div class="line number187 index186 alt2"> 187 </div> <div class="line number188 index187 alt1"> 188 </div> <div class="line number189 index188 alt2"> 189 </div> <div class="line number190 index189 alt1"> 190 </div> <div class="line number191 index190 alt2"> 191 </div> <div class="line number192 index191 alt1"> 192 </div> <div class="line number193 index192 alt2"> 193 </div> <div class="line number194 index193 alt1"> 194 </div> <div class="line number195 index194 alt2"> 195 </div> <div class="line number196 index195 alt1"> 196 </div> <div class="line number197 index196 alt2"> 197 </div> <div class="line number198 index197 alt1"> 198 </div> <div class="line number199 index198 alt2"> 199 </div> <div class="line number200 index199 alt1"> 200 </div> <div class="line number201 index200 alt2"> 201 </div> <div class="line number202 index201 alt1"> 202 </div> <div class="line number203 index202 alt2"> 203 </div> <div class="line number204 index203 alt1"> 204 </div> <div class="line number205 index204 alt2"> 205 </div> <div class="line number206 index205 alt1"> 206 </div> <div class="line number207 index206 alt2"> 207 </div> <div class="line number208 index207 alt1"> 208 </div> <div class="line number209 index208 alt2"> 209 </div> <div class="line number210 index209 alt1"> 210 </div> <div class="line number211 index210 alt2"> 211 </div> <div class="line number212 index211 alt1"> 212 </div> <div class="line number213 index212 alt2"> 213 </div> <div class="line number214 index213 alt1"> 214 </div> <div class="line number215 index214 alt2"> 215 </div> <div class="line number216 index215 alt1"> 216 </div> <div class="line number217 index216 alt2"> 217 </div> <div class="line number218 index217 alt1"> 218 </div> <div class="line number219 index218 alt2"> 219 </div> <div class="line number220 index219 alt1"> 220 </div> <div class="line number221 index220 alt2"> 221 </div> <div class="line number222 index221 alt1"> 222 </div> <div class="line number223 index222 alt2"> 223 </div> <div class="line number224 index223 alt1"> 224 </div> <div class="line number225 index224 alt2"> 225 </div> <div class="line number226 index225 alt1"> 226 </div> <div class="line number227 index226 alt2"> 227 </div> <div class="line number228 index227 alt1"> 228 </div> <div class="line number229 index228 alt2"> 229 </div> <div class="line number230 index229 alt1"> 230 </div> <div class="line number231 index230 alt2"> 231 </div> <div class="line number232 index231 alt1"> 232 </div> <div class="line number233 index232 alt2"> 233 </div> <div class="line number234 index233 alt1"> 234 </div> <div class="line number235 index234 alt2"> 235 </div> <div class="line number236 index235 alt1"> 236 </div> <div class="line number237 index236 alt2"> 237 </div> <div class="line number238 index237 alt1"> 238 </div> <div class="line number239 index238 alt2"> 239 </div> <div class="line number240 index239 alt1"> 240 </div> <div class="line number241 index240 alt2"> 241 </div> <div class="line number242 index241 alt1"> 242 </div> <div class="line number243 index242 alt2"> 243 </div> <div class="line number244 index243 alt1"> 244 </div> <div class="line number245 index244 alt2"> 245 </div> <div class="line number246 index245 alt1"> 246 </div> <div class="line number247 index246 alt2"> 247 </div> <div class="line number248 index247 alt1"> 248 </div> <div class="line number249 index248 alt2"> 249 </div> <div class="line number250 index249 alt1"> 250 </div> <div class="line number251 index250 alt2"> 251 </div> <div class="line number252 index251 alt1"> 252 </div> <div class="line number253 index252 alt2"> 253 </div> <div class="line number254 index253 alt1"> 254 </div> <div class="line number255 index254 alt2"> 255 </div> <div class="line number256 index255 alt1"> 256 </div> <div class="line number257 index256 alt2"> 257 </div> <div class="line number258 index257 alt1"> 258 </div> <div class="line number259 index258 alt2"> 259 </div> <div class="line number260 index259 alt1"> 260 </div> <div class="line number261 index260 alt2"> 261 </div> <div class="line number262 index261 alt1"> 262 </div> <div class="line number263 index262 alt2"> 263 </div> <div class="line number264 index263 alt1"> 264 </div> <div class="line number265 index264 alt2"> 265 </div> <div class="line number266 index265 alt1"> 266 </div> <div class="line number267 index266 alt2"> 267 </div> <div class="line number268 index267 alt1"> 268 </div> <div class="line number269 index268 alt2"> 269 </div> <div class="line number270 index269 alt1"> 270 </div> <div class="line number271 index270 alt2"> 271 </div> <div class="line number272 index271 alt1"> 272 </div> <div class="line number273 index272 alt2"> 273 </div> <div class="line number274 index273 alt1"> 274 </div> <div class="line number275 index274 alt2"> 275 </div> <div class="line number276 index275 alt1"> 276 </div> <div class="line number277 index276 alt2"> 277 </div> <div class="line number278 index277 alt1"> 278 </div> <div class="line number279 index278 alt2"> 279 </div> <div class="line number280 index279 alt1"> 280 </div> <div class="line number281 index280 alt2"> 281 </div> <div class="line number282 index281 alt1"> 282 </div> <div class="line number283 index282 alt2"> 283 </div> <div class="line number284 index283 alt1"> 284 </div> <div class="line number285 index284 alt2"> 285 </div> <div class="line number286 index285 alt1"> 286 </div> <div class="line number287 index286 alt2"> 287 </div> <div class="line number288 index287 alt1"> 288 </div> <div class="line number289 index288 alt2"> 289 </div> <div class="line number290 index289 alt1"> 290 </div> <div class="line number291 index290 alt2"> 291 </div> <div class="line number292 index291 alt1"> 292 </div> <div class="line number293 index292 alt2"> 293 </div> <div class="line number294 index293 alt1"> 294 </div> <div class="line number295 index294 alt2"> 295 </div> <div class="line number296 index295 alt1"> 296 </div> <div class="line number297 index296 alt2"> 297 </div> <div class="line number298 index297 alt1"> 298 </div> <div class="line number299 index298 alt2"> 299 </div> <div class="line number300 index299 alt1"> 300 </div> <div class="line number301 index300 alt2"> 301 </div> <div class="line number302 index301 alt1"> 302 </div> <div class="line number303 index302 alt2"> 303 </div> <div class="line number304 index303 alt1"> 304 </div> <div class="line number305 index304 alt2"> 305 </div> <div class="line number306 index305 alt1"> 306 </div> <div class="line number307 index306 alt2"> 307 </div> <div class="line number308 index307 alt1"> 308 </div> <div class="line number309 index308 alt2"> 309 </div> <div class="line number310 index309 alt1"> 310 </div> <div class="line number311 index310 alt2"> 311 </div> <div class="line number312 index311 alt1"> 312 </div> <div class="line number313 index312 alt2"> 313 </div> <div class="line number314 index313 alt1"> 314 </div> <div class="line number315 index314 alt2"> 315 </div> <div class="line number316 index315 alt1"> 316 </div> <div class="line number317 index316 alt2"> 317 </div> <div class="line number318 index317 alt1"> 318 </div> <div class="line number319 index318 alt2"> 319 </div> <div class="line number320 index319 alt1"> 320 </div> <div class="line number321 index320 alt2"> 321 </div> <div class="line number322 index321 alt1"> 322 </div> <div class="line number323 index322 alt2"> 323 </div> <div class="line number324 index323 alt1"> 324 </div> <div class="line number325 index324 alt2"> 325 </div> <div class="line number326 index325 alt1"> 326 </div> <div class="line number327 index326 alt2"> 327 </div> <div class="line number328 index327 alt1"> 328 </div> <div class="line number329 index328 alt2"> 329 </div> <div class="line number330 index329 alt1"> 330 </div> <div class="line number331 index330 alt2"> 331 </div> <div class="line number332 index331 alt1"> 332 </div> <div class="line number333 index332 alt2"> 333 </div> <div class="line number334 index333 alt1"> 334 </div> <div class="line number335 index334 alt2"> 335 </div> <div class="line number336 index335 alt1"> 336 </div> <div class="line number337 index336 alt2"> 337 </div> <div class="line number338 index337 alt1"> 338 </div> <div class="line number339 index338 alt2"> 339 </div> <div class="line number340 index339 alt1"> 340 </div> <div class="line number341 index340 alt2"> 341 </div> <div class="line number342 index341 alt1"> 342 </div> <div class="line number343 index342 alt2"> 343 </div> <div class="line number344 index343 alt1"> 344 </div> <div class="line number345 index344 alt2"> 345 </div> <div class="line number346 index345 alt1"> 346 </div> <div class="line number347 index346 alt2"> 347 </div> <div class="line number348 index347 alt1"> 348 </div> <div class="line number349 index348 alt2"> 349 </div> <div class="line number350 index349 alt1"> 350 </div> <div class="line number351 index350 alt2"> 351 </div> <div class="line number352 index351 alt1"> 352 </div> <div class="line number353 index352 alt2"> 353 </div> <div class="line number354 index353 alt1"> 354 </div> <div class="line number355 index354 alt2"> 355 </div> <div class="line number356 index355 alt1"> 356 </div> <div class="line number357 index356 alt2"> 357 </div> <div class="line number358 index357 alt1"> 358 </div> <div class="line number359 index358 alt2"> 359 </div> <div class="line number360 index359 alt1"> 360 </div> <div class="line number361 index360 alt2"> 361 </div> <div class="line number362 index361 alt1"> 362 </div> <div class="line number363 index362 alt2"> 363 </div> <div class="line number364 index363 alt1"> 364 </div> <div class="line number365 index364 alt2"> 365 </div> <div class="line number366 index365 alt1"> 366 </div> <div class="line number367 index366 alt2"> 367 </div> <div class="line number368 index367 alt1"> 368 </div> <div class="line number369 index368 alt2"> 369 </div> <div class="line number370 index369 alt1"> 370 </div> <div class="line number371 index370 alt2"> 371 </div> <div class="line number372 index371 alt1"> 372 </div> <div class="line number373 index372 alt2"> 373 </div> <div class="line number374 index373 alt1"> 374 </div> <div class="line number375 index374 alt2"> 375 </div> <div class="line number376 index375 alt1"> 376 </div> <div class="line number377 index376 alt2"> 377 </div> <div class="line number378 index377 alt1"> 378 </div> <div class="line number379 index378 alt2"> 379 </div> <div class="line number380 index379 alt1"> 380 </div> <div class="line number381 index380 alt2"> 381 </div> <div class="line number382 index381 alt1"> 382 </div> <div class="line number383 index382 alt2"> 383 </div> <div class="line number384 index383 alt1"> 384 </div> <div class="line number385 index384 alt2"> 385 </div> <div class="line number386 index385 alt1"> 386 </div> <div class="line number387 index386 alt2"> 387 </div> <div class="line number388 index387 alt1"> 388 </div> <div class="line number389 index388 alt2"> 389 </div> <div class="line number390 index389 alt1"> 390 </div> <div class="line number391 index390 alt2"> 391 </div> <div class="line number392 index391 alt1"> 392 </div> <div class="line number393 index392 alt2"> 393 </div> <div class="line number394 index393 alt1"> 394 </div> <div class="line number395 index394 alt2"> 395 </div> <div class="line number396 index395 alt1"> 396 </div> <div class="line number397 index396 alt2"> 397 </div> <div class="line number398 index397 alt1"> 398 </div> <div class="line number399 index398 alt2"> 399 </div> <div class="line number400 index399 alt1"> 400 </div> <div class="line number401 index400 alt2"> 401 </div> <div class="line number402 index401 alt1"> 402 </div> <div class="line number403 index402 alt2"> 403 </div> <div class="line number404 index403 alt1"> 404 </div> <div class="line number405 index404 alt2"> 405 </div> <div class="line number406 index405 alt1"> 406 </div> <div class="line number407 index406 alt2"> 407 </div> <div class="line number408 index407 alt1"> 408 </div> <div class="line number409 index408 alt2"> 409 </div> <div class="line number410 index409 alt1"> 410 </div> <div class="line number411 index410 alt2"> 411 </div> <div class="line number412 index411 alt1"> 412 </div> <div class="line number413 index412 alt2"> 413 </div> <div class="line number414 index413 alt1"> 414 </div> <div class="line number415 index414 alt2"> 415 </div> <div class="line number416 index415 alt1"> 416 </div> <div class="line number417 index416 alt2"> 417 </div> <div class="line number418 index417 alt1"> 418 </div> <div class="line number419 index418 alt2"> 419 </div> <div class="line number420 index419 alt1"> 420 </div> <div class="line number421 index420 alt2"> 421 </div> <div class="line number422 index421 alt1"> 422 </div> <div class="line number423 index422 alt2"> 423 </div> <div class="line number424 index423 alt1"> 424 </div> <div class="line number425 index424 alt2"> 425 </div> <div class="line number426 index425 alt1"> 426 </div> <div class="line number427 index426 alt2"> 427 </div> <div class="line number428 index427 alt1"> 428 </div> <div class="line number429 index428 alt2"> 429 </div> <div class="line number430 index429 alt1"> 430 </div> <div class="line number431 index430 alt2"> 431 </div> <div class="line number432 index431 alt1"> 432 </div> <div class="line number433 index432 alt2"> 433 </div> <div class="line number434 index433 alt1"> 434 </div> <div class="line number435 index434 alt2"> 435 </div> <div class="line number436 index435 alt1"> 436 </div> <div class="line number437 index436 alt2"> 437 </div> <div class="line number438 index437 alt1"> 438 </div> <div class="line number439 index438 alt2"> 439 </div> <div class="line number440 index439 alt1"> 440 </div> <div class="line number441 index440 alt2"> 441 </div> <div class="line number442 index441 alt1"> 442 </div> <div class="line number443 index442 alt2"> 443 </div> <div class="line number444 index443 alt1"> 444 </div> <div class="line number445 index444 alt2"> 445 </div> <div class="line number446 index445 alt1"> 446 </div> <div class="line number447 index446 alt2"> 447 </div> <div class="line number448 index447 alt1"> 448 </div> <div class="line number449 index448 alt2"> 449 </div> <div class="line number450 index449 alt1"> 450 </div> <div class="line number451 index450 alt2"> 451 </div> <div class="line number452 index451 alt1"> 452 </div> <div class="line number453 index452 alt2"> 453 </div> <div class="line number454 index453 alt1"> 454 </div> <div class="line number455 index454 alt2"> 455 </div> <div class="line number456 index455 alt1"> 456 </div> <div class="line number457 index456 alt2"> 457 </div> <div class="line number458 index457 alt1"> 458 </div> <div class="line number459 index458 alt2"> 459 </div> <div class="line number460 index459 alt1"> 460 </div> <div class="line number461 index460 alt2"> 461 </div> <div class="line number462 index461 alt1"> 462 </div> <div class="line number463 index462 alt2"> 463 </div> <div class="line number464 index463 alt1"> 464 </div> <div class="line number465 index464 alt2"> 465 </div> <div class="line number466 index465 alt1"> 466 </div> <div class="line number467 index466 alt2"> 467 </div> <div class="line number468 index467 alt1"> 468 </div> <div class="line number469 index468 alt2"> 469 </div> <div class="line number470 index469 alt1"> 470 </div> <div class="line number471 index470 alt2"> 471 </div> <div class="line number472 index471 alt1"> 472 </div> <div class="line number473 index472 alt2"> 473 </div> <div class="line number474 index473 alt1"> 474 </div> <div class="line number475 index474 alt2"> 475 </div> <div class="line number476 index475 alt1"> 476 </div> <div class="line number477 index476 alt2"> 477 </div> <div class="line number478 index477 alt1"> 478 </div> <div class="line number479 index478 alt2"> 479 </div> <div class="line number480 index479 alt1"> 480 </div> <div class="line number481 index480 alt2"> 481 </div> <div class="line number482 index481 alt1"> 482 </div> <div class="line number483 index482 alt2"> 483 </div> <div class="line number484 index483 alt1"> 484 </div> <div class="line number485 index484 alt2"> 485 </div> <div class="line number486 index485 alt1"> 486 </div> <div class="line number487 index486 alt2"> 487 </div> <div class="line number488 index487 alt1"> 488 </div> <div class="line number489 index488 alt2"> 489 </div> <div class="line number490 index489 alt1"> 490 </div> <div class="line number491 index490 alt2"> 491 </div> <div class="line number492 index491 alt1"> 492 </div> <div class="line number493 index492 alt2"> 493 </div> <div class="line number494 index493 alt1"> 494 </div> <div class="line number495 index494 alt2"> 495 </div> <div class="line number496 index495 alt1"> 496 </div> <div class="line number497 index496 alt2"> 497 </div> <div class="line number498 index497 alt1"> 498 </div> <div class="line number499 index498 alt2"> 499 </div> <div class="line number500 index499 alt1"> 500 </div> <div class="line number501 index500 alt2"> 501 </div> <div class="line number502 index501 alt1"> 502 </div> <div class="line number503 index502 alt2"> 503 </div> <div class="line number504 index503 alt1"> 504 </div> <div class="line number505 index504 alt2"> 505 </div> <div class="line number506 index505 alt1"> 506 </div> <div class="line number507 index506 alt2"> 507 </div> <div class="line number508 index507 alt1"> 508 </div> <div class="line number509 index508 alt2"> 509 </div> <div class="line number510 index509 alt1"> 510 </div> <div class="line number511 index510 alt2"> 511 </div> <div class="line number512 index511 alt1"> 512 </div> <div class="line number513 index512 alt2"> 513 </div> <div class="line number514 index513 alt1"> 514 </div> <div class="line number515 index514 alt2"> 515 </div> <div class="line number516 index515 alt1"> 516 </div> <div class="line number517 index516 alt2"> 517 </div> <div class="line number518 index517 alt1"> 518 </div> <div class="line number519 index518 alt2"> 519 </div> <div class="line number520 index519 alt1"> 520 </div> <div class="line number521 index520 alt2"> 521 </div> <div class="line number522 index521 alt1"> 522 </div> <div class="line number523 index522 alt2"> 523 </div> <div class="line number524 index523 alt1"> 524 </div> <div class="line number525 index524 alt2"> 525 </div> <div class="line number526 index525 alt1"> 526 </div> <div class="line number527 index526 alt2"> 527 </div> <div class="line number528 index527 alt1"> 528 </div> <div class="line number529 index528 alt2"> 529 </div> <div class="line number530 index529 alt1"> 530 </div> <div class="line number531 index530 alt2"> 531 </div> <div class="line number532 index531 alt1"> 532 </div> <div class="line number533 index532 alt2"> 533 </div> <div class="line number534 index533 alt1"> 534 </div> <div class="line number535 index534 alt2"> 535 </div> <div class="line number536 index535 alt1"> 536 </div> <div class="line number537 index536 alt2"> 537 </div> <div class="line number538 index537 alt1"> 538 </div> <div class="line number539 index538 alt2"> 539 </div> <div class="line number540 index539 alt1"> 540 </div> <div class="line number541 index540 alt2"> 541 </div> <div class="line number542 index541 alt1"> 542 </div> <div class="line number543 index542 alt2"> 543 </div> <div class="line number544 index543 alt1"> 544 </div> <div class="line number545 index544 alt2"> 545 </div> <div class="line number546 index545 alt1"> 546 </div> <div class="line number547 index546 alt2"> 547 </div> <div class="line number548 index547 alt1"> 548 </div> <div class="line number549 index548 alt2"> 549 </div> <div class="line number550 index549 alt1"> 550 </div> <div class="line number551 index550 alt2"> 551 </div> <div class="line number552 index551 alt1"> 552 </div> <div class="line number553 index552 alt2"> 553 </div> <div class="line number554 index553 alt1"> 554 </div> <div class="line number555 index554 alt2"> 555 </div> <div class="line number556 index555 alt1"> 556 </div> <div class="line number557 index556 alt2"> 557 </div> <div class="line number558 index557 alt1"> 558 </div> <div class="line number559 index558 alt2"> 559 </div> <div class="line number560 index559 alt1"> 560 </div> <div class="line number561 index560 alt2"> 561 </div> <div class="line number562 index561 alt1"> 562 </div> <div class="line number563 index562 alt2"> 563 </div> <div class="line number564 index563 alt1"> 564 </div> <div class="line number565 index564 alt2"> 565 </div> <div class="line number566 index565 alt1"> 566 </div> <div class="line number567 index566 alt2"> 567 </div> <div class="line number568 index567 alt1"> 568 </div> <div class="line number569 index568 alt2"> 569 </div> <div class="line number570 index569 alt1"> 570 </div> <div class="line number571 index570 alt2"> 571 </div> <div class="line number572 index571 alt1"> 572 </div> <div class="line number573 index572 alt2"> 573 </div> <div class="line number574 index573 alt1"> 574 </div> <div class="line number575 index574 alt2"> 575 </div> <div class="line number576 index575 alt1"> 576 </div> <div class="line number577 index576 alt2"> 577 </div> <div class="line number578 index577 alt1"> 578 </div> <div class="line number579 index578 alt2"> 579 </div> <div class="line number580 index579 alt1"> 580 </div> <div class="line number581 index580 alt2"> 581 </div> <div class="line number582 index581 alt1"> 582 </div> <div class="line number583 index582 alt2"> 583 </div> <div class="line number584 index583 alt1"> 584 </div> <div class="line number585 index584 alt2"> 585 </div> <div class="line number586 index585 alt1"> 586 </div> <div class="line number587 index586 alt2"> 587 </div> <div class="line number588 index587 alt1"> 588 </div> <div class="line number589 index588 alt2"> 589 </div> <div class="line number590 index589 alt1"> 590 </div> <div class="line number591 index590 alt2"> 591 </div> <div class="line number592 index591 alt1"> 592 </div> <div class="line number593 index592 alt2"> 593 </div> <div class="line number594 index593 alt1"> 594 </div> <div class="line number595 index594 alt2"> 595 </div> <div class="line number596 index595 alt1"> 596 </div> <div class="line number597 index596 alt2"> 597 </div> <div class="line number598 index597 alt1"> 598 </div> <div class="line number599 index598 alt2"> 599 </div> <div class="line number600 index599 alt1"> 600 </div> <div class="line number601 index600 alt2"> 601 </div> <div class="line number602 index601 alt1"> 602 </div> <div class="line number603 index602 alt2"> 603 </div> <div class="line number604 index603 alt1"> 604 </div> <div class="line number605 index604 alt2"> 605 </div> <div class="line number606 index605 alt1"> 606 </div> <div class="line number607 index606 alt2"> 607 </div> <div class="line number608 index607 alt1"> 608 </div> <div class="line number609 index608 alt2"> 609 </div> <div class="line number610 index609 alt1"> 610 </div> <div class="line number611 index610 alt2"> 611 </div> <div class="line number612 index611 alt1"> 612 </div> <div class="line number613 index612 alt2"> 613 </div> <div class="line number614 index613 alt1"> 614 </div> <div class="line number615 index614 alt2"> 615 </div> <div class="line number616 index615 alt1"> 616 </div> <div class="line number617 index616 alt2"> 617 </div> <div class="line number618 index617 alt1"> 618 </div> <div class="line number619 index618 alt2"> 619 </div> <div class="line number620 index619 alt1"> 620 </div> <div class="line number621 index620 alt2"> 621 </div> <div class="line number622 index621 alt1"> 622 </div> <div class="line number623 index622 alt2"> 623 </div> <div class="line number624 index623 alt1"> 624 </div> <div class="line number625 index624 alt2"> 625 </div> <div class="line number626 index625 alt1"> 626 </div> <div class="line number627 index626 alt2"> 627 </div> <div class="line number628 index627 alt1"> 628 </div> <div class="line number629 index628 alt2"> 629 </div> <div class="line number630 index629 alt1"> 630 </div> <div class="line number631 index630 alt2"> 631 </div> <div class="line number632 index631 alt1"> 632 </div> <div class="line number633 index632 alt2"> 633 </div> <div class="line number634 index633 alt1"> 634 </div> <div class="line number635 index634 alt2"> 635 </div> <div class="line number636 index635 alt1"> 636 </div> <div class="line number637 index636 alt2"> 637 </div> <div class="line number638 index637 alt1"> 638 </div> <div class="line number639 index638 alt2"> 639 </div> <div class="line number640 index639 alt1"> 640 </div> <div class="line number641 index640 alt2"> 641 </div> <div class="line number642 index641 alt1"> 642 </div> <div class="line number643 index642 alt2"> 643 </div> <div class="line number644 index643 alt1"> 644 </div> <div class="line number645 index644 alt2"> 645 </div> <div class="line number646 index645 alt1"> 646 </div> <div class="line number647 index646 alt2"> 647 </div> <div class="line number648 index647 alt1"> 648 </div> <div class="line number649 index648 alt2"> 649 </div> <div class="line number650 index649 alt1"> 650 </div> <div class="line number651 index650 alt2"> 651 </div> <div class="line number652 index651 alt1"> 652 </div> <div class="line number653 index652 alt2"> 653 </div> <div class="line number654 index653 alt1"> 654 </div> <div class="line number655 index654 alt2"> 655 </div> <div class="line number656 index655 alt1"> 656 </div> <div class="line number657 index656 alt2"> 657 </div> <div class="line number658 index657 alt1"> 658 </div> <div class="line number659 index658 alt2"> 659 </div> <div class="line number660 index659 alt1"> 660 </div> <div class="line number661 index660 alt2"> 661 </div> <div class="line number662 index661 alt1"> 662 </div> <div class="line number663 index662 alt2"> 663 </div> <div class="line number664 index663 alt1"> 664 </div> <div class="line number665 index664 alt2"> 665 </div> <div class="line number666 index665 alt1"> 666 </div> <div class="line number667 index666 alt2"> 667 </div> <div class="line number668 index667 alt1"> 668 </div> <div class="line number669 index668 alt2"> 669 </div> <div class="line number670 index669 alt1"> 670 </div> <div class="line number671 index670 alt2"> 671 </div> <div class="line number672 index671 alt1"> 672 </div> <div class="line number673 index672 alt2"> 673 </div> <div class="line number674 index673 alt1"> 674 </div> <div class="line number675 index674 alt2"> 675 </div> <div class="line number676 index675 alt1"> 676 </div> <div class="line number677 index676 alt2"> 677 </div> <div class="line number678 index677 alt1"> 678 </div> <div class="line number679 index678 alt2"> 679 </div> <div class="line number680 index679 alt1"> 680 </div> <div class="line number681 index680 alt2"> 681 </div> <div class="line number682 index681 alt1"> 682 </div> <div class="line number683 index682 alt2"> 683 </div> <div class="line number684 index683 alt1"> 684 </div> <div class="line number685 index684 alt2"> 685 </div> <div class="line number686 index685 alt1"> 686 </div> <div class="line number687 index686 alt2"> 687 </div> <div class="line number688 index687 alt1"> 688 </div> <div class="line number689 index688 alt2"> 689 </div> <div class="line number690 index689 alt1"> 690 </div> <div class="line number691 index690 alt2"> 691 </div> <div class="line number692 index691 alt1"> 692 </div> <div class="line number693 index692 alt2"> 693 </div> <div class="line number694 index693 alt1"> 694 </div> <div class="line number695 index694 alt2"> 695 </div> <div class="line number696 index695 alt1"> 696 </div> <div class="line number697 index696 alt2"> 697 </div> <div class="line number698 index697 alt1"> 698 </div> <div class="line number699 index698 alt2"> 699 </div> <div class="line number700 index699 alt1"> 700 </div> <div class="line number701 index700 alt2"> 701 </div> <div class="line number702 index701 alt1"> 702 </div> <div class="line number703 index702 alt2"> 703 </div> <div class="line number704 index703 alt1"> 704 </div> <div class="line number705 index704 alt2"> 705 </div> <div class="line number706 index705 alt1"> 706 </div> <div class="line number707 index706 alt2"> 707 </div> <div class="line number708 index707 alt1"> 708 </div> <div class="line number709 index708 alt2"> 709 </div> <div class="line number710 index709 alt1"> 710 </div> <div class="line number711 index710 alt2"> 711 </div> <div class="line number712 index711 alt1"> 712 </div> <div class="line number713 index712 alt2"> 713 </div> <div class="line number714 index713 alt1"> 714 </div> <div class="line number715 index714 alt2"> 715 </div> <div class="line number716 index715 alt1"> 716 </div> <div class="line number717 index716 alt2"> 717 </div> <div class="line number718 index717 alt1"> 718 </div> <div class="line number719 index718 alt2"> 719 </div> <div class="line number720 index719 alt1"> 720 </div> <div class="line number721 index720 alt2"> 721 </div> <div class="line number722 index721 alt1"> 722 </div> <div class="line number723 index722 alt2"> 723 </div> <div class="line number724 index723 alt1"> 724 </div> <div class="line number725 index724 alt2"> 725 </div> <div class="line number726 index725 alt1"> 726 </div> <div class="line number727 index726 alt2"> 727 </div> <div class="line number728 index727 alt1"> 728 </div> <div class="line number729 index728 alt2"> 729 </div> <div class="line number730 index729 alt1"> 730 </div> <div class="line number731 index730 alt2"> 731 </div> <div class="line number732 index731 alt1"> 732 </div> <div class="line number733 index732 alt2"> 733 </div> <div class="line number734 index733 alt1"> 734 </div> <div class="line number735 index734 alt2"> 735 </div> <div class="line number736 index735 alt1"> 736 </div> <div class="line number737 index736 alt2"> 737 </div> <div class="line number738 index737 alt1"> 738 </div> <div class="line number739 index738 alt2"> 739 </div> <div class="line number740 index739 alt1"> 740 </div> <div class="line number741 index740 alt2"> 741 </div> <div class="line number742 index741 alt1"> 742 </div> <div class="line number743 index742 alt2"> 743 </div> <div class="line number744 index743 alt1"> 744 </div> <div class="line number745 index744 alt2"> 745 </div> <div class="line number746 index745 alt1"> 746 </div> <div class="line number747 index746 alt2"> 747 </div> <div class="line number748 index747 alt1"> 748 </div> <div class="line number749 index748 alt2"> 749 </div> <div class="line number750 index749 alt1"> 750 </div> <div class="line number751 index750 alt2"> 751 </div> <div class="line number752 index751 alt1"> 752 </div> <div class="line number753 index752 alt2"> 753 </div> <div class="line number754 index753 alt1"> 754 </div> <div class="line number755 index754 alt2"> 755 </div> <div class="line number756 index755 alt1"> 756 </div> <div class="line number757 index756 alt2"> 757 </div> <div class="line number758 index757 alt1"> 758 </div> <div class="line number759 index758 alt2"> 759 </div> <div class="line number760 index759 alt1"> 760 </div> <div class="line number761 index760 alt2"> 761 </div> <div class="line number762 index761 alt1"> 762 </div> <div class="line number763 index762 alt2"> 763 </div> <div class="line number764 index763 alt1"> 764 </div> <div class="line number765 index764 alt2"> 765 </div> <div class="line number766 index765 alt1"> 766 </div> <div class="line number767 index766 alt2"> 767 </div> <div class="line number768 index767 alt1"> 768 </div> <div class="line number769 index768 alt2"> 769 </div> <div class="line number770 index769 alt1"> 770 </div> <div class="line number771 index770 alt2"> 771 </div> <div class="line number772 index771 alt1"> 772 </div> <div class="line number773 index772 alt2"> 773 </div> <div class="line number774 index773 alt1"> 774 </div> <div class="line number775 index774 alt2"> 775 </div> <div class="line number776 index775 alt1"> 776 </div> <div class="line number777 index776 alt2"> 777 </div> <div class="line number778 index777 alt1"> 778 </div> <div class="line number779 index778 alt2"> 779 </div> <div class="line number780 index779 alt1"> 780 </div> <div class="line number781 index780 alt2"> 781 </div> <div class="line number782 index781 alt1"> 782 </div> <div class="line number783 index782 alt2"> 783 </div> <div class="line number784 index783 alt1"> 784 </div> <div class="line number785 index784 alt2"> 785 </div> <div class="line number786 index785 alt1"> 786 </div> <div class="line number787 index786 alt2"> 787 </div> <div class="line number788 index787 alt1"> 788 </div> <div class="line number789 index788 alt2"> 789 </div> <div class="line number790 index789 alt1"> 790 </div> <div class="line number791 index790 alt2"> 791 </div> <div class="line number792 index791 alt1"> 792 </div> <div class="line number793 index792 alt2"> 793 </div> <div class="line number794 index793 alt1"> 794 </div> <div class="line number795 index794 alt2"> 795 </div> <div class="line number796 index795 alt1"> 796 </div> <div class="line number797 index796 alt2"> 797 </div> <div class="line number798 index797 alt1"> 798 </div> <div class="line number799 index798 alt2"> 799 </div> <div class="line number800 index799 alt1"> 800 </div> <div class="line number801 index800 alt2"> 801 </div> <div class="line number802 index801 alt1"> 802 </div> <div class="line number803 index802 alt2"> 803 </div> <div class="line number804 index803 alt1"> 804 </div> <div class="line number805 index804 alt2"> 805 </div> <div class="line number806 index805 alt1"> 806 </div> <div class="line number807 index806 alt2"> 807 </div> <div class="line number808 index807 alt1"> 808 </div> <div class="line number809 index808 alt2"> 809 </div> <div class="line number810 index809 alt1"> 810 </div> <div class="line number811 index810 alt2"> 811 </div> <div class="line number812 index811 alt1"> 812 </div> <div class="line number813 index812 alt2"> 813 </div> <div class="line number814 index813 alt1"> 814 </div> <div class="line number815 index814 alt2"> 815 </div> <div class="line number816 index815 alt1"> 816 </div> <div class="line number817 index816 alt2"> 817 </div> <div class="line number818 index817 alt1"> 818 </div> <div class="line number819 index818 alt2"> 819 </div> <div class="line number820 index819 alt1"> 820 </div> <div class="line number821 index820 alt2"> 821 </div> <div class="line number822 index821 alt1"> 822 </div> <div class="line number823 index822 alt2"> 823 </div> <div class="line number824 index823 alt1"> 824 </div> <div class="line number825 index824 alt2"> 825 </div> <div class="line number826 index825 alt1"> 826 </div> <div class="line number827 index826 alt2"> 827 </div> <div class="line number828 index827 alt1"> 828 </div> <div class="line number829 index828 alt2"> 829 </div> <div class="line number830 index829 alt1"> 830 </div> <div class="line number831 index830 alt2"> 831 </div> <div class="line number832 index831 alt1"> 832 </div> <div class="line number833 index832 alt2"> 833 </div> <div class="line number834 index833 alt1"> 834 </div> <div class="line number835 index834 alt2"> 835 </div> <div class="line number836 index835 alt1"> 836 </div> <div class="line number837 index836 alt2"> 837 </div> <div class="line number838 index837 alt1"> 838 </div> <div class="line number839 index838 alt2"> 839 </div> <div class="line number840 index839 alt1"> 840 </div> <div class="line number841 index840 alt2"> 841 </div> <div class="line number842 index841 alt1"> 842 </div> <div class="line number843 index842 alt2"> 843 </div> <div class="line number844 index843 alt1"> 844 </div> <div class="line number845 index844 alt2"> 845 </div> <div class="line number846 index845 alt1"> 846 </div> <div class="line number847 index846 alt2"> 847 </div> <div class="line number848 index847 alt1"> 848 </div> <div class="line number849 index848 alt2"> 849 </div> <div class="line number850 index849 alt1"> 850 </div> <div class="line number851 index850 alt2"> 851 </div> <div class="line number852 index851 alt1"> 852 </div> <div class="line number853 index852 alt2"> 853 </div> <div class="line number854 index853 alt1"> 854 </div> <div class="line number855 index854 alt2"> 855 </div> <div class="line number856 index855 alt1"> 856 </div> <div class="line number857 index856 alt2"> 857 </div> <div class="line number858 index857 alt1"> 858 </div> <div class="line number859 index858 alt2"> 859 </div> <div class="line number860 index859 alt1"> 860 </div> <div class="line number861 index860 alt2"> 861 </div> <div class="line number862 index861 alt1"> 862 </div> <div class="line number863 index862 alt2"> 863 </div> <div class="line number864 index863 alt1"> 864 </div> <div class="line number865 index864 alt2"> 865 </div> <div class="line number866 index865 alt1"> 866 </div> <div class="line number867 index866 alt2"> 867 </div> <div class="line number868 index867 alt1"> 868 </div> <div class="line number869 index868 alt2"> 869 </div> <div class="line number870 index869 alt1"> 870 </div> <div class="line number871 index870 alt2"> 871 </div> <div class="line number872 index871 alt1"> 872 </div> <div class="line number873 index872 alt2"> 873 </div> <div class="line number874 index873 alt1"> 874 </div> <div class="line number875 index874 alt2"> 875 </div> <div class="line number876 index875 alt1"> 876 </div> <div class="line number877 index876 alt2"> 877 </div> <div class="line number878 index877 alt1"> 878 </div> <div class="line number879 index878 alt2"> 879 </div> <div class="line number880 index879 alt1"> 880 </div> <div class="line number881 index880 alt2"> 881 </div> <div class="line number882 index881 alt1"> 882 </div> <div class="line number883 index882 alt2"> 883 </div> <div class="line number884 index883 alt1"> 884 </div> <div class="line number885 index884 alt2"> 885 </div> <div class="line number886 index885 alt1"> 886 </div> <div class="line number887 index886 alt2"> 887 </div> <div class="line number888 index887 alt1"> 888 </div> <div class="line number889 index888 alt2"> 889 </div> <div class="line number890 index889 alt1"> 890 </div> <div class="line number891 index890 alt2"> 891 </div> <div class="line number892 index891 alt1"> 892 </div> <div class="line number893 index892 alt2"> 893 </div> <div class="line number894 index893 alt1"> 894 </div> <div class="line number895 index894 alt2"> 895 </div> <div class="line number896 index895 alt1"> 896 </div> <div class="line number897 index896 alt2"> 897 </div> <div class="line number898 index897 alt1"> 898 </div> <div class="line number899 index898 alt2"> 899 </div> <div class="line number900 index899 alt1"> 900 </div> <div class="line number901 index900 alt2"> 901 </div> <div class="line number902 index901 alt1"> 902 </div> <div class="line number903 index902 alt2"> 903 </div> <div class="line number904 index903 alt1"> 904 </div> <div class="line number905 index904 alt2"> 905 </div> <div class="line number906 index905 alt1"> 906 </div> <div class="line number907 index906 alt2"> 907 </div> <div class="line number908 index907 alt1"> 908 </div> <div class="line number909 index908 alt2"> 909 </div> <div class="line number910 index909 alt1"> 910 </div> <div class="line number911 index910 alt2"> 911 </div> <div class="line number912 index911 alt1"> 912 </div> <div class="line number913 index912 alt2"> 913 </div> <div class="line number914 index913 alt1"> 914 </div> <div class="line number915 index914 alt2"> 915 </div> <div class="line number916 index915 alt1"> 916 </div> <div class="line number917 index916 alt2"> 917 </div> <div class="line number918 index917 alt1"> 918 </div> <div class="line number919 index918 alt2"> 919 </div> <div class="line number920 index919 alt1"> 920 </div> <div class="line number921 index920 alt2"> 921 </div> <div class="line number922 index921 alt1"> 922 </div> <div class="line number923 index922 alt2"> 923 </div> <div class="line number924 index923 alt1"> 924 </div> <div class="line number925 index924 alt2"> 925 </div> <div class="line number926 index925 alt1"> 926 </div> <div class="line number927 index926 alt2"> 927 </div> <div class="line number928 index927 alt1"> 928 </div> <div class="line number929 index928 alt2"> 929 </div> <div class="line number930 index929 alt1"> 930 </div> <div class="line number931 index930 alt2"> 931 </div> <div class="line number932 index931 alt1"> 932 </div> <div class="line number933 index932 alt2"> 933 </div> <div class="line number934 index933 alt1"> 934 </div> <div class="line number935 index934 alt2"> 935 </div> <div class="line number936 index935 alt1"> 936 </div> <div class="line number937 index936 alt2"> 937 </div> <div class="line number938 index937 alt1"> 938 </div> <div class="line number939 index938 alt2"> 939 </div> <div class="line number940 index939 alt1"> 940 </div> <div class="line number941 index940 alt2"> 941 </div> <div class="line number942 index941 alt1"> 942 </div> <div class="line number943 index942 alt2"> 943 </div> <div class="line number944 index943 alt1"> 944 </div> <div class="line number945 index944 alt2"> 945 </div> <div class="line number946 index945 alt1"> 946 </div> <div class="line number947 index946 alt2"> 947 </div> <div class="line number948 index947 alt1"> 948 </div> <div class="line number949 index948 alt2"> 949 </div> <div class="line number950 index949 alt1"> 950 </div> <div class="line number951 index950 alt2"> 951 </div> <div class="line number952 index951 alt1"> 952 </div> <div class="line number953 index952 alt2"> 953 </div> <div class="line number954 index953 alt1"> 954 </div> <div class="line number955 index954 alt2"> 955 </div> <div class="line number956 index955 alt1"> 956 </div> <div class="line number957 index956 alt2"> 957 </div> <div class="line number958 index957 alt1"> 958 </div> <div class="line number959 index958 alt2"> 959 </div> <div class="line number960 index959 alt1"> 960 </div> <div class="line number961 index960 alt2"> 961 </div> <div class="line number962 index961 alt1"> 962 </div> <div class="line number963 index962 alt2"> 963 </div> <div class="line number964 index963 alt1"> 964 </div> <div class="line number965 index964 alt2"> 965 </div> <div class="line number966 index965 alt1"> 966 </div> <div class="line number967 index966 alt2"> 967 </div> <div class="line number968 index967 alt1"> 968 </div> <div class="line number969 index968 alt2"> 969 </div> <div class="line number970 index969 alt1"> 970 </div> <div class="line number971 index970 alt2"> 971 </div> <div class="line number972 index971 alt1"> 972 </div> <div class="line number973 index972 alt2"> 973 </div> <div class="line number974 index973 alt1"> 974 </div> <div class="line number975 index974 alt2"> 975 </div> <div class="line number976 index975 alt1"> 976 </div> <div class="line number977 index976 alt2"> 977 </div> <div class="line number978 index977 alt1"> 978 </div> <div class="line number979 index978 alt2"> 979 </div> <div class="line number980 index979 alt1"> 980 </div> <div class="line number981 index980 alt2"> 981 </div> <div class="line number982 index981 alt1"> 982 </div> <div class="line number983 index982 alt2"> 983 </div> <div class="line number984 index983 alt1"> 984 </div> <div class="line number985 index984 alt2"> 985 </div> <div class="line number986 index985 alt1"> 986 </div> <div class="line number987 index986 alt2"> 987 </div> <div class="line number988 index987 alt1"> 988 </div> <div class="line number989 index988 alt2"> 989 </div> <div class="line number990 index989 alt1"> 990 </div> <div class="line number991 index990 alt2"> 991 </div> <div class="line number992 index991 alt1"> 992 </div> <div class="line number993 index992 alt2"> 993 </div> <div class="line number994 index993 alt1"> 994 </div> <div class="line number995 index994 alt2"> 995 </div> <div class="line number996 index995 alt1"> 996 </div> <div class="line number997 index996 alt2"> 997 </div> <div class="line number998 index997 alt1"> 998 </div> <div class="line number999 index998 alt2"> 999 </div> <div class="line number1000 index999 alt1"> 1000 </div> <div class="line number1001 index1000 alt2"> 1001 </div> <div class="line number1002 index1001 alt1"> 1002 </div> <div class="line number1003 index1002 alt2"> 1003 </div> <div class="line number1004 index1003 alt1"> 1004 </div> <div class="line number1005 index1004 alt2"> 1005 </div> <div class="line number1006 index1005 alt1"> 1006 </div> <div class="line number1007 index1006 alt2"> 1007 </div> <div class="line number1008 index1007 alt1"> 1008 </div> <div class="line number1009 index1008 alt2"> 1009 </div> <div class="line number1010 index1009 alt1"> 1010 </div> <div class="line number1011 index1010 alt2"> 1011 </div> <div class="line number1012 index1011 alt1"> 1012 </div> <div class="line number1013 index1012 alt2"> 1013 </div> <div class="line number1014 index1013 alt1"> 1014 </div> <div class="line number1015 index1014 alt2"> 1015 </div> <div class="line number1016 index1015 alt1"> 1016 </div> <div class="line number1017 index1016 alt2"> 1017 </div> <div class="line number1018 index1017 alt1"> 1018 </div> <div class="line number1019 index1018 alt2"> 1019 </div> <div class="line number1020 index1019 alt1"> 1020 </div> <div class="line number1021 index1020 alt2"> 1021 </div> <div class="line number1022 index1021 alt1"> 1022 </div> <div class="line number1023 index1022 alt2"> 1023 </div> <div class="line number1024 index1023 alt1"> 1024 </div> <div class="line number1025 index1024 alt2"> 1025 </div> <div class="line number1026 index1025 alt1"> 1026 </div> <div class="line number1027 index1026 alt2"> 1027 </div> <div class="line number1028 index1027 alt1"> 1028 </div> <div class="line number1029 index1028 alt2"> 1029 </div> <div class="line number1030 index1029 alt1"> 1030 </div> <div class="line number1031 index1030 alt2"> 1031 </div> <div class="line number1032 index1031 alt1"> 1032 </div> <div class="line number1033 index1032 alt2"> 1033 </div> <div class="line number1034 index1033 alt1"> 1034 </div> <div class="line number1035 index1034 alt2"> 1035 </div> <div class="line number1036 index1035 alt1"> 1036 </div> <div class="line number1037 index1036 alt2"> 1037 </div> <div class="line number1038 index1037 alt1"> 1038 </div> <div class="line number1039 index1038 alt2"> 1039 </div> <div class="line number1040 index1039 alt1"> 1040 </div> <div class="line number1041 index1040 alt2"> 1041 </div> <div class="line number1042 index1041 alt1"> 1042 </div> <div class="line number1043 index1042 alt2"> 1043 </div> <div class="line number1044 index1043 alt1"> 1044 </div> <div class="line number1045 index1044 alt2"> 1045 </div> <div class="line number1046 index1045 alt1"> 1046 </div> <div class="line number1047 index1046 alt2"> 1047 </div> <div class="line number1048 index1047 alt1"> 1048 </div> <div class="line number1049 index1048 alt2"> 1049 </div> <div class="line number1050 index1049 alt1"> 1050 </div> <div class="line number1051 index1050 alt2"> 1051 </div> <div class="line number1052 index1051 alt1"> 1052 </div> <div class="line number1053 index1052 alt2"> 1053 </div> <div class="line number1054 index1053 alt1"> 1054 </div> <div class="line number1055 index1054 alt2"> 1055 </div> <div class="line number1056 index1055 alt1"> 1056 </div> <div class="line number1057 index1056 alt2"> 1057 </div> <div class="line number1058 index1057 alt1"> 1058 </div> <div class="line number1059 index1058 alt2"> 1059 </div> <div class="line number1060 index1059 alt1"> 1060 </div> <div class="line number1061 index1060 alt2"> 1061 </div> <div class="line number1062 index1061 alt1"> 1062 </div> <div class="line number1063 index1062 alt2"> 1063 </div> <div class="line number1064 index1063 alt1"> 1064 </div> <div class="line number1065 index1064 alt2"> 1065 </div> <div class="line number1066 index1065 alt1"> 1066 </div> <div class="line number1067 index1066 alt2"> 1067 </div> <div class="line number1068 index1067 alt1"> 1068 </div> <div class="line number1069 index1068 alt2"> 1069 </div> <div class="line number1070 index1069 alt1"> 1070 </div> <div class="line number1071 index1070 alt2"> 1071 </div> <div class="line number1072 index1071 alt1"> 1072 </div> <div class="line number1073 index1072 alt2"> 1073 </div> <div class="line number1074 index1073 alt1"> 1074 </div> <div class="line number1075 index1074 alt2"> 1075 </div> <div class="line number1076 index1075 alt1"> 1076 </div> <div class="line number1077 index1076 alt2"> 1077 </div> <div class="line number1078 index1077 alt1"> 1078 </div> <div class="line number1079 index1078 alt2"> 1079 </div> <div class="line number1080 index1079 alt1"> 1080 </div> <div class="line number1081 index1080 alt2"> 1081 </div> <div class="line number1082 index1081 alt1"> 1082 </div> <div class="line number1083 index1082 alt2"> 1083 </div> <div class="line number1084 index1083 alt1"> 1084 </div> <div class="line number1085 index1084 alt2"> 1085 </div> <div class="line number1086 index1085 alt1"> 1086 </div> <div class="line number1087 index1086 alt2"> 1087 </div> <div class="line number1088 index1087 alt1"> 1088 </div> <div class="line number1089 index1088 alt2"> 1089 </div> <div class="line number1090 index1089 alt1"> 1090 </div> <div class="line number1091 index1090 alt2"> 1091 </div> <div class="line number1092 index1091 alt1"> 1092 </div> <div class="line number1093 index1092 alt2"> 1093 </div> <div class="line number1094 index1093 alt1"> 1094 </div> <div class="line number1095 index1094 alt2"> 1095 </div> <div class="line number1096 index1095 alt1"> 1096 </div> <div class="line number1097 index1096 alt2"> 1097 </div> <div class="line number1098 index1097 alt1"> 1098 </div> <div class="line number1099 index1098 alt2"> 1099 </div> <div class="line number1100 index1099 alt1"> 1100 </div> <div class="line number1101 index1100 alt2"> 1101 </div> <div class="line number1102 index1101 alt1"> 1102 </div> <div class="line number1103 index1102 alt2"> 1103 </div> <div class="line number1104 index1103 alt1"> 1104 </div> <div class="line number1105 index1104 alt2"> 1105 </div> <div class="line number1106 index1105 alt1"> 1106 </div> <div class="line number1107 index1106 alt2"> 1107 </div> <div class="line number1108 index1107 alt1"> 1108 </div> <div class="line number1109 index1108 alt2"> 1109 </div> <div class="line number1110 index1109 alt1"> 1110 </div> <div class="line number1111 index1110 alt2"> 1111 </div> <div class="line number1112 index1111 alt1"> 1112 </div> <div class="line number1113 index1112 alt2"> 1113 </div> <div class="line number1114 index1113 alt1"> 1114 </div> <div class="line number1115 index1114 alt2"> 1115 </div> <div class="line number1116 index1115 alt1"> 1116 </div> <div class="line number1117 index1116 alt2"> 1117 </div> <div class="line number1118 index1117 alt1"> 1118 </div> <div class="line number1119 index1118 alt2"> 1119 </div> <div class="line number1120 index1119 alt1"> 1120 </div> <div class="line number1121 index1120 alt2"> 1121 </div> <div class="line number1122 index1121 alt1"> 1122 </div> <div class="line number1123 index1122 alt2"> 1123 </div> <div class="line number1124 index1123 alt1"> 1124 </div> <div class="line number1125 index1124 alt2"> 1125 </div> <div class="line number1126 index1125 alt1"> 1126 </div> <div class="line number1127 index1126 alt2"> 1127 </div> <div class="line number1128 index1127 alt1"> 1128 </div> <div class="line number1129 index1128 alt2"> 1129 </div> <div class="line number1130 index1129 alt1"> 1130 </div> <div class="line number1131 index1130 alt2"> 1131 </div> <div class="line number1132 index1131 alt1"> 1132 </div> <div class="line number1133 index1132 alt2"> 1133 </div> <div class="line number1134 index1133 alt1"> 1134 </div> <div class="line number1135 index1134 alt2"> 1135 </div> <div class="line number1136 index1135 alt1"> 1136 </div> <div class="line number1137 index1136 alt2"> 1137 </div> <div class="line number1138 index1137 alt1"> 1138 </div> <div class="line number1139 index1138 alt2"> 1139 </div> <div class="line number1140 index1139 alt1"> 1140 </div> <div class="line number1141 index1140 alt2"> 1141 </div> <div class="line number1142 index1141 alt1"> 1142 </div> <div class="line number1143 index1142 alt2"> 1143 </div> <div class="line number1144 index1143 alt1"> 1144 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `public` `class` `SlidingMenu ``extends` `RelativeLayout {` </div> <div class="line number2 index1 alt1"> </div> <div class="line number3 index2 alt2"> ` ``private` `static` `final` `String TAG = SlidingMenu.``class``.getSimpleName();` </div> <div class="line number4 index3 alt1"> </div> <div class="line number5 index4 alt2"> ` ``public` `static` `final` `int` `SLIDING_WINDOW = ````;` </div> <div class="line number6 index5 alt1"> ` ``public` `static` `final` `int` `SLIDING_CONTENT = ``1``;` </div> <div class="line number7 index6 alt2"> ` ``private` `boolean` `mActionbarOverlay = ``false``;` </div> <div class="line number8 index7 alt1"> </div> <div class="line number9 index8 alt2"> ` ``/**` </div> <div class="line number10 index9 alt1"> ` ``* Constant value for use with setTouchModeAbove(). Allows the SlidingMenu` </div> <div class="line number11 index10 alt2"> ` ``* to be opened with a swipe gesture on the screen's margin` </div> <div class="line number12 index11 alt1"> ` ``*/` </div> <div class="line number13 index12 alt2"> ` ``public` `static` `final` `int` `TOUCHMODE_MARGIN = ````;` </div> <div class="line number14 index13 alt1"> </div> <div class="line number15 index14 alt2"> ` ``/**` </div> <div class="line number16 index15 alt1"> ` ``* Constant value for use with setTouchModeAbove(). Allows the SlidingMenu` </div> <div class="line number17 index16 alt2"> ` ``* to be opened with a swipe gesture anywhere on the screen` </div> <div class="line number18 index17 alt1"> ` ``*/` </div> <div class="line number19 index18 alt2"> ` ``public` `static` `final` `int` `TOUCHMODE_FULLSCREEN = ``1``;` </div> <div class="line number20 index19 alt1"> </div> <div class="line number21 index20 alt2"> ` ``/**` </div> <div class="line number22 index21 alt1"> ` ``* Constant value for use with setTouchModeAbove(). Denies the SlidingMenu` </div> <div class="line number23 index22 alt2"> ` ``* to be opened with a swipe gesture` </div> <div class="line number24 index23 alt1"> ` ``*/` </div> <div class="line number25 index24 alt2"> ` ``public` `static` `final` `int` `TOUCHMODE_NONE = ``2``;` </div> <div class="line number26 index25 alt1"> </div> <div class="line number27 index26 alt2"> ` ``/**` </div> <div class="line number28 index27 alt1"> ` ``* Constant value for use with setMode(). Puts the menu to the left of the` </div> <div class="line number29 index28 alt2"> ` ``* content.` </div> <div class="line number30 index29 alt1"> ` ``*/` </div> <div class="line number31 index30 alt2"> ` ``public` `static` `final` `int` `LEFT = ````;` </div> <div class="line number32 index31 alt1"> </div> <div class="line number33 index32 alt2"> ` ``/**` </div> <div class="line number34 index33 alt1"> ` ``* Constant value for use with setMode(). Puts the menu to the right of the` </div> <div class="line number35 index34 alt2"> ` ``* content.` </div> <div class="line number36 index35 alt1"> ` ``*/` </div> <div class="line number37 index36 alt2"> ` ``public` `static` `final` `int` `RIGHT = ``1``;` </div> <div class="line number38 index37 alt1"> </div> <div class="line number39 index38 alt2"> ` ``/**` </div> <div class="line number40 index39 alt1"> ` ``* Constant value for use with setMode(). Puts menus to the left and right` </div> <div class="line number41 index40 alt2"> ` ``* of the content.` </div> <div class="line number42 index41 alt1"> ` ``*/` </div> <div class="line number43 index42 alt2"> ` ``public` `static` `final` `int` `LEFT_RIGHT = ``2``;` </div> <div class="line number44 index43 alt1"> </div> <div class="line number45 index44 alt2"> ` ``private` `CustomViewAbove mViewAbove;` </div> <div class="line number46 index45 alt1"> </div> <div class="line number47 index46 alt2"> ` ``private` `CustomViewBehind mViewBehind;` </div> <div class="line number48 index47 alt1"> </div> <div class="line number49 index48 alt2"> ` ``/** 整体的背景,用一个ImageView代替 */` </div> <div class="line number50 index49 alt1"> ` ``private` `ImageView mViewBackground;` </div> <div class="line number51 index50 alt2"> </div> <div class="line number52 index51 alt1"> ` ``private` `OnOpenListener mOpenListener;` </div> <div class="line number53 index52 alt2"> </div> <div class="line number54 index53 alt1"> ` ``private` `OnOpenListener mSecondaryOpenListner;` </div> <div class="line number55 index54 alt2"> </div> <div class="line number56 index55 alt1"> ` ``private` `OnCloseListener mCloseListener;` </div> <div class="line number57 index56 alt2"> </div> <div class="line number58 index57 alt1"> ` ``/**` </div> <div class="line number59 index58 alt2"> ` ``* The listener interface for receiving onOpen events. The class that is` </div> <div class="line number60 index59 alt1"> ` ``* interested in processing a onOpen event implements this interface, and` </div> <div class="line number61 index60 alt2"> ` ``* the object created with that class is registered with a component using` </div> <div class="line number62 index61 alt1"> ` ``* the component's &lt;code&gt;addOnOpenListener&lt;code&gt; method. When` </div> <div class="line number63 index62 alt2"> ` ``* the onOpen event occurs, that object's appropriate` </div> <div class="line number64 index63 alt1"> ` ``* method is invoked` </div> <div class="line number65 index64 alt2"> ` ``*/` </div> <div class="line number66 index65 alt1"> ` ``public` `interface` `OnOpenListener {` </div> <div class="line number67 index66 alt2"> </div> <div class="line number68 index67 alt1"> ` ``/**` </div> <div class="line number69 index68 alt2"> ` ``* On open.` </div> <div class="line number70 index69 alt1"> ` ``*/` </div> <div class="line number71 index70 alt2"> ` ``public` `void` `onOpen();` </div> <div class="line number72 index71 alt1"> ` ``}` </div> <div class="line number73 index72 alt2"> </div> <div class="line number74 index73 alt1"> ` ``/**` </div> <div class="line number75 index74 alt2"> ` ``* The listener interface for receiving onOpened events. The class that is` </div> <div class="line number76 index75 alt1"> ` ``* interested in processing a onOpened event implements this interface, and` </div> <div class="line number77 index76 alt2"> ` ``* the object created with that class is registered with a component using` </div> <div class="line number78 index77 alt1"> ` ``* the component's &lt;code&gt;addOnOpenedListener&lt;code&gt; method. When` </div> <div class="line number79 index78 alt2"> ` ``* the onOpened event occurs, that object's appropriate` </div> <div class="line number80 index79 alt1"> ` ``* method is invoked.` </div> <div class="line number81 index80 alt2"> ` ``*` </div> <div class="line number82 index81 alt1"> ` ``* @see OnOpenedEvent` </div> <div class="line number83 index82 alt2"> ` ``*/` </div> <div class="line number84 index83 alt1"> ` ``public` `interface` `OnOpenedListener {` </div> <div class="line number85 index84 alt2"> </div> <div class="line number86 index85 alt1"> ` ``/**` </div> <div class="line number87 index86 alt2"> ` ``* On opened.` </div> <div class="line number88 index87 alt1"> ` ``*/` </div> <div class="line number89 index88 alt2"> ` ``public` `void` `onOpened();` </div> <div class="line number90 index89 alt1"> ` ``}` </div> <div class="line number91 index90 alt2"> </div> <div class="line number92 index91 alt1"> ` ``/**` </div> <div class="line number93 index92 alt2"> ` ``* The listener interface for receiving onClose events. The class that is` </div> <div class="line number94 index93 alt1"> ` ``* interested in processing a onClose event implements this interface, and` </div> <div class="line number95 index94 alt2"> ` ``* the object created with that class is registered with a component using` </div> <div class="line number96 index95 alt1"> ` ``* the component's &lt;code&gt;addOnCloseListener&lt;code&gt; method. When` </div> <div class="line number97 index96 alt2"> ` ``* the onClose event occurs, that object's appropriate` </div> <div class="line number98 index97 alt1"> ` ``* method is invoked.` </div> <div class="line number99 index98 alt2"> ` ``*` </div> <div class="line number100 index99 alt1"> ` ``* @see OnCloseEvent` </div> <div class="line number101 index100 alt2"> ` ``*/` </div> <div class="line number102 index101 alt1"> ` ``public` `interface` `OnCloseListener {` </div> <div class="line number103 index102 alt2"> </div> <div class="line number104 index103 alt1"> ` ``/**` </div> <div class="line number105 index104 alt2"> ` ``* On close.` </div> <div class="line number106 index105 alt1"> ` ``*/` </div> <div class="line number107 index106 alt2"> ` ``public` `void` `onClose();` </div> <div class="line number108 index107 alt1"> ` ``}` </div> <div class="line number109 index108 alt2"> </div> <div class="line number110 index109 alt1"> ` ``/**` </div> <div class="line number111 index110 alt2"> ` ``* The listener interface for receiving onClosed events. The class that is` </div> <div class="line number112 index111 alt1"> ` ``* interested in processing a onClosed event implements this interface, and` </div> <div class="line number113 index112 alt2"> ` ``* the object created with that class is registered with a component using` </div> <div class="line number114 index113 alt1"> ` ``* the component's &lt;code&gt;addOnClosedListener&lt;code&gt; method. When` </div> <div class="line number115 index114 alt2"> ` ``* the onClosed event occurs, that object's appropriate` </div> <div class="line number116 index115 alt1"> ` ``* method is invoked.` </div> <div class="line number117 index116 alt2"> ` ``*` </div> <div class="line number118 index117 alt1"> ` ``* @see OnClosedEvent` </div> <div class="line number119 index118 alt2"> ` ``*/` </div> <div class="line number120 index119 alt1"> ` ``public` `interface` `OnClosedListener {` </div> <div class="line number121 index120 alt2"> </div> <div class="line number122 index121 alt1"> ` ``/**` </div> <div class="line number123 index122 alt2"> ` ``* On closed.` </div> <div class="line number124 index123 alt1"> ` ``*/` </div> <div class="line number125 index124 alt2"> ` ``public` `void` `onClosed();` </div> <div class="line number126 index125 alt1"> ` ``}` </div> <div class="line number127 index126 alt2"> </div> <div class="line number128 index127 alt1"> ` ``/**` </div> <div class="line number129 index128 alt2"> ` ``* The Interface CanvasTransformer.` </div> <div class="line number130 index129 alt1"> ` ``*/` </div> <div class="line number131 index130 alt2"> ` ``public` `interface` `CanvasTransformer {` </div> <div class="line number132 index131 alt1"> </div> <div class="line number133 index132 alt2"> ` ``/**` </div> <div class="line number134 index133 alt1"> ` ``* Transform canvas.` </div> <div class="line number135 index134 alt2"> ` ``*` </div> <div class="line number136 index135 alt1"> ` ``* @param canvas` </div> <div class="line number137 index136 alt2"> ` ``* the canvas` </div> <div class="line number138 index137 alt1"> ` ``* @param percentOpen` </div> <div class="line number139 index138 alt2"> ` ``* the percent open` </div> <div class="line number140 index139 alt1"> ` ``*/` </div> <div class="line number141 index140 alt2"> ` ``public` `void` `transformCanvas(Canvas canvas, ``float` `percentOpen);` </div> <div class="line number142 index141 alt1"> ` ``}` </div> <div class="line number143 index142 alt2"> </div> <div class="line number144 index143 alt1"> ` ``/**` </div> <div class="line number145 index144 alt2"> ` ``* Instantiates a new SlidingMenu.` </div> <div class="line number146 index145 alt1"> ` ``*` </div> <div class="line number147 index146 alt2"> ` ``* @param context` </div> <div class="line number148 index147 alt1"> ` ``* the associated Context` </div> <div class="line number149 index148 alt2"> ` ``*/` </div> <div class="line number150 index149 alt1"> ` ``public` `SlidingMenu(Context context) {` </div> <div class="line number151 index150 alt2"> ` ``this``(context, ``null``);` </div> <div class="line number152 index151 alt1"> ` ``}` </div> <div class="line number153 index152 alt2"> </div> <div class="line number154 index153 alt1"> ` ``/**` </div> <div class="line number155 index154 alt2"> ` ``* Instantiates a new SlidingMenu and attach to Activity.` </div> <div class="line number156 index155 alt1"> ` ``*` </div> <div class="line number157 index156 alt2"> ` ``* @param activity` </div> <div class="line number158 index157 alt1"> ` ``* the activity to attach slidingmenu` </div> <div class="line number159 index158 alt2"> ` ``* @param slideStyle` </div> <div class="line number160 index159 alt1"> ` ``* the slidingmenu style` </div> <div class="line number161 index160 alt2"> ` ``*/` </div> <div class="line number162 index161 alt1"> ` ``public` `SlidingMenu(Activity activity, ``int` `slideStyle) {` </div> <div class="line number163 index162 alt2"> ` ``this``(activity, ``null``);` </div> <div class="line number164 index163 alt1"> ` ``this``.attachToActivity(activity, slideStyle);` </div> <div class="line number165 index164 alt2"> ` ``}` </div> <div class="line number166 index165 alt1"> </div> <div class="line number167 index166 alt2"> ` ``/**` </div> <div class="line number168 index167 alt1"> ` ``* Instantiates a new SlidingMenu.` </div> <div class="line number169 index168 alt2"> ` ``*` </div> <div class="line number170 index169 alt1"> ` ``* @param context` </div> <div class="line number171 index170 alt2"> ` ``* the associated Context` </div> <div class="line number172 index171 alt1"> ` ``* @param attrs` </div> <div class="line number173 index172 alt2"> ` ``* the attrs` </div> <div class="line number174 index173 alt1"> ` ``*/` </div> <div class="line number175 index174 alt2"> ` ``public` `SlidingMenu(Context context, AttributeSet attrs) {` </div> <div class="line number176 index175 alt1"> ` ``this``(context, attrs, ````);` </div> <div class="line number177 index176 alt2"> ` ``}` </div> <div class="line number178 index177 alt1"> </div> <div class="line number179 index178 alt2"> ` ``/**` </div> <div class="line number180 index179 alt1"> ` ``* Instantiates a new SlidingMenu.` </div> <div class="line number181 index180 alt2"> ` ``*` </div> <div class="line number182 index181 alt1"> ` ``* @param context` </div> <div class="line number183 index182 alt2"> ` ``* the associated Context` </div> <div class="line number184 index183 alt1"> ` ``* @param attrs` </div> <div class="line number185 index184 alt2"> ` ``* the attrs` </div> <div class="line number186 index185 alt1"> ` ``* @param defStyle` </div> <div class="line number187 index186 alt2"> ` ``* the def style` </div> <div class="line number188 index187 alt1"> ` ``*/` </div> <div class="line number189 index188 alt2"> ` ``public` `SlidingMenu(Context context, AttributeSet attrs, ``int` `defStyle) {` </div> <div class="line number190 index189 alt1"> ` ``super``(context, attrs, defStyle);` </div> <div class="line number191 index190 alt2"> ` ``/** SlidingMenu是一个RelativeLayout,这里把背景图ImageView添加到RelativeLayout的最底层。*/` </div> <div class="line number192 index191 alt1"> ` ``LayoutParams backgroundParams = ``new` `LayoutParams(` </div> <div class="line number193 index192 alt2"> ` ``LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);` </div> <div class="line number194 index193 alt1"> ` ``mViewBackground = ``new` `ImageView(context);` </div> <div class="line number195 index194 alt2"> ` ``mViewBackground.setScaleType(ImageView.ScaleType.CENTER_CROP);` </div> <div class="line number196 index195 alt1"> ` ``addView(mViewBackground, backgroundParams);` </div> <div class="line number197 index196 alt2"> </div> <div class="line number198 index197 alt1"> ` ``LayoutParams behindParams = ``new` `LayoutParams(LayoutParams.MATCH_PARENT,` </div> <div class="line number199 index198 alt2"> ` ``LayoutParams.MATCH_PARENT);` </div> <div class="line number200 index199 alt1"> ` ``mViewBehind = ``new` `CustomViewBehind(context);` </div> <div class="line number201 index200 alt2"> ` ``addView(mViewBehind, behindParams);` </div> <div class="line number202 index201 alt1"> ` ``LayoutParams aboveParams = ``new` `LayoutParams(LayoutParams.MATCH_PARENT,` </div> <div class="line number203 index202 alt2"> ` ``LayoutParams.MATCH_PARENT);` </div> <div class="line number204 index203 alt1"> ` ``mViewAbove = ``new` `CustomViewAbove(context);` </div> <div class="line number205 index204 alt2"> ` ``addView(mViewAbove, aboveParams);` </div> <div class="line number206 index205 alt1"> ` ``// register the CustomViewBehind with the CustomViewAbove` </div> <div class="line number207 index206 alt2"> ` ``mViewAbove.setCustomViewBehind(mViewBehind);` </div> <div class="line number208 index207 alt1"> ` ``mViewBehind.setCustomViewAbove(mViewAbove);` </div> <div class="line number209 index208 alt2"> ` ``mViewAbove.setOnPageChangeListener(``new` `OnPageChangeListener() {` </div> <div class="line number210 index209 alt1"> ` ``public` `static` `final` `int` `POSITION_OPEN = ````;` </div> <div class="line number211 index210 alt2"> ` ``public` `static` `final` `int` `POSITION_CLOSE = ``1``;` </div> <div class="line number212 index211 alt1"> ` ``public` `static` `final` `int` `POSITION_SECONDARY_OPEN = ``2``;` </div> <div class="line number213 index212 alt2"> </div> <div class="line number214 index213 alt1"> ` ``public` `void` `onPageScrolled(``int` `position, ``float` `positionOffset,` </div> <div class="line number215 index214 alt2"> ` ``int` `positionOffsetPixels) {` </div> <div class="line number216 index215 alt1"> ` ``}` </div> <div class="line number217 index216 alt2"> </div> <div class="line number218 index217 alt1"> ` ``public` `void` `onPageSelected(``int` `position) {` </div> <div class="line number219 index218 alt2"> ` ``if` `(position == POSITION_OPEN && mOpenListener != ``null``) {` </div> <div class="line number220 index219 alt1"> ` ``mOpenListener.onOpen();` </div> <div class="line number221 index220 alt2"> ` ``} ``else` `if` `(position == POSITION_CLOSE && mCloseListener != ``null``) {` </div> <div class="line number222 index221 alt1"> ` ``mCloseListener.onClose();` </div> <div class="line number223 index222 alt2"> ` ``} ``else` `if` `(position == POSITION_SECONDARY_OPEN` </div> <div class="line number224 index223 alt1"> ` ``&& mSecondaryOpenListner != ``null``) {` </div> <div class="line number225 index224 alt2"> ` ``mSecondaryOpenListner.onOpen();` </div> <div class="line number226 index225 alt1"> ` ``}` </div> <div class="line number227 index226 alt2"> ` ``}` </div> <div class="line number228 index227 alt1"> ` ``});` </div> <div class="line number229 index228 alt2"> </div> <div class="line number230 index229 alt1"> ` ``// now style everything!` </div> <div class="line number231 index230 alt2"> ` ``TypedArray ta = context.obtainStyledAttributes(attrs,` </div> <div class="line number232 index231 alt1"> ` ``R.styleable.SlidingMenu);` </div> <div class="line number233 index232 alt2"> ` ``// set the above and behind views if defined in xml` </div> <div class="line number234 index233 alt1"> ` ``int` `mode = ta.getInt(R.styleable.SlidingMenu_mode, LEFT);` </div> <div class="line number235 index234 alt2"> ` ``setMode(mode);` </div> <div class="line number236 index235 alt1"> ` ``int` `viewAbove = ta.getResourceId(R.styleable.SlidingMenu_viewAbove, -``1``);` </div> <div class="line number237 index236 alt2"> ` ``if` `(viewAbove != -``1``) {` </div> <div class="line number238 index237 alt1"> ` ``setContent(viewAbove);` </div> <div class="line number239 index238 alt2"> ` ``} ``else` `{` </div> <div class="line number240 index239 alt1"> ` ``setContent(``new` `FrameLayout(context));` </div> <div class="line number241 index240 alt2"> ` ``}` </div> <div class="line number242 index241 alt1"> ` ``int` `viewBehind = ta.getResourceId(R.styleable.SlidingMenu_viewBehind,` </div> <div class="line number243 index242 alt2"> ` ``-``1``);` </div> <div class="line number244 index243 alt1"> ` ``if` `(viewBehind != -``1``) {` </div> <div class="line number245 index244 alt2"> ` ``setMenu(viewBehind);` </div> <div class="line number246 index245 alt1"> ` ``} ``else` `{` </div> <div class="line number247 index246 alt2"> ` ``setMenu(``new` `FrameLayout(context));` </div> <div class="line number248 index247 alt1"> ` ``}` </div> <div class="line number249 index248 alt2"> ` ``int` `touchModeAbove = ta.getInt(R.styleable.SlidingMenu_touchModeAbove,` </div> <div class="line number250 index249 alt1"> ` ``TOUCHMODE_MARGIN);` </div> <div class="line number251 index250 alt2"> ` ``setTouchModeAbove(touchModeAbove);` </div> <div class="line number252 index251 alt1"> ` ``int` `touchModeBehind = ta.getInt(` </div> <div class="line number253 index252 alt2"> ` ``R.styleable.SlidingMenu_touchModeBehind, TOUCHMODE_MARGIN);` </div> <div class="line number254 index253 alt1"> ` ``setTouchModeBehind(touchModeBehind);` </div> <div class="line number255 index254 alt2"> </div> <div class="line number256 index255 alt1"> ` ``int` `offsetBehind = (``int``) ta.getDimension(` </div> <div class="line number257 index256 alt2"> ` ``R.styleable.SlidingMenu_behindOffset, -``1``);` </div> <div class="line number258 index257 alt1"> ` ``int` `widthBehind = (``int``) ta.getDimension(` </div> <div class="line number259 index258 alt2"> ` ``R.styleable.SlidingMenu_behindWidth, -``1``);` </div> <div class="line number260 index259 alt1"> ` ``if` `(offsetBehind != -``1` `&& widthBehind != -``1``)` </div> <div class="line number261 index260 alt2"> ` ``throw` `new` `IllegalStateException(` </div> <div class="line number262 index261 alt1"> ` ``"Cannot set both behindOffset and behindWidth for a SlidingMenu"``);` </div> <div class="line number263 index262 alt2"> ` ``else` `if` `(offsetBehind != -``1``)` </div> <div class="line number264 index263 alt1"> ` ``setBehindOffset(offsetBehind);` </div> <div class="line number265 index264 alt2"> ` ``else` `if` `(widthBehind != -``1``)` </div> <div class="line number266 index265 alt1"> ` ``setBehindWidth(widthBehind);` </div> <div class="line number267 index266 alt2"> ` ``else` </div> <div class="line number268 index267 alt1"> ` ``setBehindOffset(````);` </div> <div class="line number269 index268 alt2"> ` ``float` `scrollOffsetBehind = ta.getFloat(` </div> <div class="line number270 index269 alt1"> ` ``R.styleable.SlidingMenu_behindScrollScale, ````.33f);` </div> <div class="line number271 index270 alt2"> ` ``setBehindScrollScale(scrollOffsetBehind);` </div> <div class="line number272 index271 alt1"> ` ``int` `shadowRes = ta.getResourceId(` </div> <div class="line number273 index272 alt2"> ` ``R.styleable.SlidingMenu_shadowDrawable, -``1``);` </div> <div class="line number274 index273 alt1"> ` ``if` `(shadowRes != -``1``) {` </div> <div class="line number275 index274 alt2"> ` ``setShadowDrawable(shadowRes);` </div> <div class="line number276 index275 alt1"> ` ``}` </div> <div class="line number277 index276 alt2"> ` ``int` `shadowWidth = (``int``) ta.getDimension(` </div> <div class="line number278 index277 alt1"> ` ``R.styleable.SlidingMenu_shadowWidth, ````);` </div> <div class="line number279 index278 alt2"> ` ``setShadowWidth(shadowWidth);` </div> <div class="line number280 index279 alt1"> ` ``boolean` `fadeEnabled = ta.getBoolean(` </div> <div class="line number281 index280 alt2"> ` ``R.styleable.SlidingMenu_fadeEnabled, ``true``);` </div> <div class="line number282 index281 alt1"> ` ``setFadeEnabled(fadeEnabled);` </div> <div class="line number283 index282 alt2"> ` ``float` `fadeDeg = ta.getFloat(R.styleable.SlidingMenu_fadeDegree, ````.33f);` </div> <div class="line number284 index283 alt1"> ` ``setFadeDegree(fadeDeg);` </div> <div class="line number285 index284 alt2"> ` ``boolean` `selectorEnabled = ta.getBoolean(` </div> <div class="line number286 index285 alt1"> ` ``R.styleable.SlidingMenu_selectorEnabled, ``false``);` </div> <div class="line number287 index286 alt2"> ` ``setSelectorEnabled(selectorEnabled);` </div> <div class="line number288 index287 alt1"> ` ``int` `selectorRes = ta.getResourceId(` </div> <div class="line number289 index288 alt2"> ` ``R.styleable.SlidingMenu_selectorDrawable, -``1``);` </div> <div class="line number290 index289 alt1"> ` ``if` `(selectorRes != -``1``)` </div> <div class="line number291 index290 alt2"> ` ``setSelectorDrawable(selectorRes);` </div> <div class="line number292 index291 alt1"> ` ``ta.recycle();` </div> <div class="line number293 index292 alt2"> ` ``}` </div> <div class="line number294 index293 alt1"> </div> <div class="line number295 index294 alt2"> ` ``/**` </div> <div class="line number296 index295 alt1"> ` ``* Attaches the SlidingMenu to an entire Activity` </div> <div class="line number297 index296 alt2"> ` ``*` </div> <div class="line number298 index297 alt1"> ` ``* @param activity` </div> <div class="line number299 index298 alt2"> ` ``* the Activity` </div> <div class="line number300 index299 alt1"> ` ``* @param slideStyle` </div> <div class="line number301 index300 alt2"> ` ``* either SLIDING_CONTENT or SLIDING_WINDOW` </div> <div class="line number302 index301 alt1"> ` ``*/` </div> <div class="line number303 index302 alt2"> ` ``public` `void` `attachToActivity(Activity activity, ``int` `slideStyle) {` </div> <div class="line number304 index303 alt1"> ` ``attachToActivity(activity, slideStyle, ``false``);` </div> <div class="line number305 index304 alt2"> ` ``}` </div> <div class="line number306 index305 alt1"> </div> <div class="line number307 index306 alt2"> ` ``/**` </div> <div class="line number308 index307 alt1"> ` ``* Attaches the SlidingMenu to an entire Activity` </div> <div class="line number309 index308 alt2"> ` ``*` </div> <div class="line number310 index309 alt1"> ` ``* @param activity` </div> <div class="line number311 index310 alt2"> ` ``* the Activity` </div> <div class="line number312 index311 alt1"> ` ``* @param slideStyle` </div> <div class="line number313 index312 alt2"> ` ``* either SLIDING_CONTENT or SLIDING_WINDOW` </div> <div class="line number314 index313 alt1"> ` ``* @param actionbarOverlay` </div> <div class="line number315 index314 alt2"> ` ``* whether or not the ActionBar is overlaid` </div> <div class="line number316 index315 alt1"> ` ``*/` </div> <div class="line number317 index316 alt2"> ` ``public` `void` `attachToActivity(Activity activity, ``int` `slideStyle,` </div> <div class="line number318 index317 alt1"> ` ``boolean` `actionbarOverlay) {` </div> <div class="line number319 index318 alt2"> ` ``if` `(slideStyle != SLIDING_WINDOW && slideStyle != SLIDING_CONTENT)` </div> <div class="line number320 index319 alt1"> ` ``throw` `new` `IllegalArgumentException(` </div> <div class="line number321 index320 alt2"> ` ``"slideStyle must be either SLIDING_WINDOW or SLIDING_CONTENT"``);` </div> <div class="line number322 index321 alt1"> </div> <div class="line number323 index322 alt2"> ` ``if` `(getParent() != ``null``)` </div> <div class="line number324 index323 alt1"> ` ``throw` `new` `IllegalStateException(` </div> <div class="line number325 index324 alt2"> ` ``"This SlidingMenu appears to already be attached"``);` </div> <div class="line number326 index325 alt1"> </div> <div class="line number327 index326 alt2"> ` ``// get the window background` </div> <div class="line number328 index327 alt1"> ` ``TypedArray a = activity.getTheme().obtainStyledAttributes(` </div> <div class="line number329 index328 alt2"> ` ``new` `int``[] { android.R.attr.windowBackground });` </div> <div class="line number330 index329 alt1"> ` ``int` `background = a.getResourceId(````, ````);` </div> <div class="line number331 index330 alt2"> ` ``a.recycle();` </div> <div class="line number332 index331 alt1"> </div> <div class="line number333 index332 alt2"> ` ``switch` `(slideStyle) {` </div> <div class="line number334 index333 alt1"> ` ``case` `SLIDING_WINDOW:` </div> <div class="line number335 index334 alt2"> ` ``mActionbarOverlay = ``false``;` </div> <div class="line number336 index335 alt1"> ` ``ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView();` </div> <div class="line number337 index336 alt2"> ` ``ViewGroup decorChild = (ViewGroup) decor.getChildAt(````);` </div> <div class="line number338 index337 alt1"> ` ``// save ActionBar themes that have transparent assets` </div> <div class="line number339 index338 alt2"> ` ``decorChild.setBackgroundResource(background);` </div> <div class="line number340 index339 alt1"> ` ``decor.removeView(decorChild);` </div> <div class="line number341 index340 alt2"> ` ``decor.addView(``this``);` </div> <div class="line number342 index341 alt1"> ` ``setContent(decorChild);` </div> <div class="line number343 index342 alt2"> ` ``break``;` </div> <div class="line number344 index343 alt1"> ` ``case` `SLIDING_CONTENT:` </div> <div class="line number345 index344 alt2"> ` ``mActionbarOverlay = actionbarOverlay;` </div> <div class="line number346 index345 alt1"> ` ``// take the above view out of` </div> <div class="line number347 index346 alt2"> ` ``ViewGroup contentParent = (ViewGroup) activity` </div> <div class="line number348 index347 alt1"> ` ``.findViewById(android.R.id.content);` </div> <div class="line number349 index348 alt2"> ` ``View content = contentParent.getChildAt(````);` </div> <div class="line number350 index349 alt1"> ` ``contentParent.removeView(content);` </div> <div class="line number351 index350 alt2"> ` ``contentParent.addView(``this``);` </div> <div class="line number352 index351 alt1"> ` ``setContent(content);` </div> <div class="line number353 index352 alt2"> ` ``// save people from having transparent backgrounds` </div> <div class="line number354 index353 alt1"> ` ``if` `(content.getBackground() == ``null``)` </div> <div class="line number355 index354 alt2"> ` ``content.setBackgroundResource(background);` </div> <div class="line number356 index355 alt1"> ` ``break``;` </div> <div class="line number357 index356 alt2"> ` ``}` </div> <div class="line number358 index357 alt1"> ` ``}` </div> <div class="line number359 index358 alt2"> </div> <div class="line number360 index359 alt1"> ` ``/**` </div> <div class="line number361 index360 alt2"> ` ``* Set the above view content from a layout resource. The resource will be` </div> <div class="line number362 index361 alt1"> ` ``* inflated, adding all top-level views to the above view.` </div> <div class="line number363 index362 alt2"> ` ``*` </div> <div class="line number364 index363 alt1"> ` ``* @param res` </div> <div class="line number365 index364 alt2"> ` ``* the new content` </div> <div class="line number366 index365 alt1"> ` ``*/` </div> <div class="line number367 index366 alt2"> ` ``public` `void` `setContent(``int` `res) {` </div> <div class="line number368 index367 alt1"> ` ``setContent(LayoutInflater.from(getContext()).inflate(res, ``null``));` </div> <div class="line number369 index368 alt2"> ` ``}` </div> <div class="line number370 index369 alt1"> </div> <div class="line number371 index370 alt2"> ` ``/**` </div> <div class="line number372 index371 alt1"> ` ``* Set the above view content to the given View.` </div> <div class="line number373 index372 alt2"> ` ``*` </div> <div class="line number374 index373 alt1"> ` ``* @param view` </div> <div class="line number375 index374 alt2"> ` ``* The desired content to display.` </div> <div class="line number376 index375 alt1"> ` ``*/` </div> <div class="line number377 index376 alt2"> ` ``public` `void` `setContent(View view) {` </div> <div class="line number378 index377 alt1"> ` ``mViewAbove.setContent(view);` </div> <div class="line number379 index378 alt2"> ` ``showContent();` </div> <div class="line number380 index379 alt1"> ` ``}` </div> <div class="line number381 index380 alt2"> </div> <div class="line number382 index381 alt1"> ` ``/**` </div> <div class="line number383 index382 alt2"> ` ``* 设置背景图片` </div> <div class="line number384 index383 alt1"> ` ``*` </div> <div class="line number385 index384 alt2"> ` ``* @param resid` </div> <div class="line number386 index385 alt1"> ` ``*/` </div> <div class="line number387 index386 alt2"> ` ``public` `void` `setBackgroundImage(``int` `resid) {` </div> <div class="line number388 index387 alt1"> ` ``mViewBackground.setBackgroundResource(resid);` </div> <div class="line number389 index388 alt2"> ` ``}` </div> <div class="line number390 index389 alt1"> </div> <div class="line number391 index390 alt2"> ` ``/**` </div> <div class="line number392 index391 alt1"> ` ``* Retrieves the current content.` </div> <div class="line number393 index392 alt2"> ` ``*` </div> <div class="line number394 index393 alt1"> ` ``* @return the current content` </div> <div class="line number395 index394 alt2"> ` ``*/` </div> <div class="line number396 index395 alt1"> ` ``public` `View getContent() {` </div> <div class="line number397 index396 alt2"> ` ``return` `mViewAbove.getContent();` </div> <div class="line number398 index397 alt1"> ` ``}` </div> <div class="line number399 index398 alt2"> </div> <div class="line number400 index399 alt1"> ` ``/**` </div> <div class="line number401 index400 alt2"> ` ``* Set the behind view (menu) content from a layout resource. The resource` </div> <div class="line number402 index401 alt1"> ` ``* will be inflated, adding all top-level views to the behind view.` </div> <div class="line number403 index402 alt2"> ` ``*` </div> <div class="line number404 index403 alt1"> ` ``* @param res` </div> <div class="line number405 index404 alt2"> ` ``* the new content` </div> <div class="line number406 index405 alt1"> ` ``*/` </div> <div class="line number407 index406 alt2"> ` ``public` `void` `setMenu(``int` `res) {` </div> <div class="line number408 index407 alt1"> ` ``setMenu(LayoutInflater.from(getContext()).inflate(res, ``null``));` </div> <div class="line number409 index408 alt2"> ` ``}` </div> <div class="line number410 index409 alt1"> </div> <div class="line number411 index410 alt2"> ` ``/**` </div> <div class="line number412 index411 alt1"> ` ``* Set the behind view (menu) content to the given View.` </div> <div class="line number413 index412 alt2"> ` ``*` </div> <div class="line number414 index413 alt1"> ` ``* @param view` </div> <div class="line number415 index414 alt2"> ` ``* The desired content to display.` </div> <div class="line number416 index415 alt1"> ` ``*/` </div> <div class="line number417 index416 alt2"> ` ``public` `void` `setMenu(View v) {` </div> <div class="line number418 index417 alt1"> ` ``mViewBehind.setContent(v);` </div> <div class="line number419 index418 alt2"> ` ``}` </div> <div class="line number420 index419 alt1"> </div> <div class="line number421 index420 alt2"> ` ``/**` </div> <div class="line number422 index421 alt1"> ` ``* Retrieves the main menu.` </div> <div class="line number423 index422 alt2"> ` ``*` </div> <div class="line number424 index423 alt1"> ` ``* @return the main menu` </div> <div class="line number425 index424 alt2"> ` ``*/` </div> <div class="line number426 index425 alt1"> ` ``public` `View getMenu() {` </div> <div class="line number427 index426 alt2"> ` ``return` `mViewBehind.getContent();` </div> <div class="line number428 index427 alt1"> ` ``}` </div> <div class="line number429 index428 alt2"> </div> <div class="line number430 index429 alt1"> ` ``/**` </div> <div class="line number431 index430 alt2"> ` ``* Set the secondary behind view (right menu) content from a layout` </div> <div class="line number432 index431 alt1"> ` ``* resource. The resource will be inflated, adding all top-level views to` </div> <div class="line number433 index432 alt2"> ` ``* the behind view.` </div> <div class="line number434 index433 alt1"> ` ``*` </div> <div class="line number435 index434 alt2"> ` ``* @param res` </div> <div class="line number436 index435 alt1"> ` ``* the new content` </div> <div class="line number437 index436 alt2"> ` ``*/` </div> <div class="line number438 index437 alt1"> ` ``public` `void` `setSecondaryMenu(``int` `res) {` </div> <div class="line number439 index438 alt2"> ` ``setSecondaryMenu(LayoutInflater.from(getContext()).inflate(res, ``null``));` </div> <div class="line number440 index439 alt1"> ` ``}` </div> <div class="line number441 index440 alt2"> </div> <div class="line number442 index441 alt1"> ` ``/**` </div> <div class="line number443 index442 alt2"> ` ``* Set the secondary behind view (right menu) content to the given View.` </div> <div class="line number444 index443 alt1"> ` ``*` </div> <div class="line number445 index444 alt2"> ` ``* @param view` </div> <div class="line number446 index445 alt1"> ` ``* The desired content to display.` </div> <div class="line number447 index446 alt2"> ` ``*/` </div> <div class="line number448 index447 alt1"> ` ``public` `void` `setSecondaryMenu(View v) {` </div> <div class="line number449 index448 alt2"> ` ``mViewBehind.setSecondaryContent(v);` </div> <div class="line number450 index449 alt1"> ` ``// mViewBehind.invalidate();` </div> <div class="line number451 index450 alt2"> ` ``}` </div> <div class="line number452 index451 alt1"> </div> <div class="line number453 index452 alt2"> ` ``/**` </div> <div class="line number454 index453 alt1"> ` ``* Retrieves the current secondary menu (right).` </div> <div class="line number455 index454 alt2"> ` ``*` </div> <div class="line number456 index455 alt1"> ` ``* @return the current menu` </div> <div class="line number457 index456 alt2"> ` ``*/` </div> <div class="line number458 index457 alt1"> ` ``public` `View getSecondaryMenu() {` </div> <div class="line number459 index458 alt2"> ` ``return` `mViewBehind.getSecondaryContent();` </div> <div class="line number460 index459 alt1"> ` ``}` </div> <div class="line number461 index460 alt2"> </div> <div class="line number462 index461 alt1"> ` ``/**` </div> <div class="line number463 index462 alt2"> ` ``* Sets the sliding enabled.` </div> <div class="line number464 index463 alt1"> ` ``*` </div> <div class="line number465 index464 alt2"> ` ``* @param b` </div> <div class="line number466 index465 alt1"> ` ``* true to enable sliding, false to disable it.` </div> <div class="line number467 index466 alt2"> ` ``*/` </div> <div class="line number468 index467 alt1"> ` ``public` `void` `setSlidingEnabled(``boolean` `b) {` </div> <div class="line number469 index468 alt2"> ` ``mViewAbove.setSlidingEnabled(b);` </div> <div class="line number470 index469 alt1"> ` ``}` </div> <div class="line number471 index470 alt2"> </div> <div class="line number472 index471 alt1"> ` ``/**` </div> <div class="line number473 index472 alt2"> ` ``* Checks if is sliding enabled.` </div> <div class="line number474 index473 alt1"> ` ``*` </div> <div class="line number475 index474 alt2"> ` ``* @return true, if is sliding enabled` </div> <div class="line number476 index475 alt1"> ` ``*/` </div> <div class="line number477 index476 alt2"> ` ``public` `boolean` `isSlidingEnabled() {` </div> <div class="line number478 index477 alt1"> ` ``return` `mViewAbove.isSlidingEnabled();` </div> <div class="line number479 index478 alt2"> ` ``}` </div> <div class="line number480 index479 alt1"> </div> <div class="line number481 index480 alt2"> ` ``/**` </div> <div class="line number482 index481 alt1"> ` ``* Sets which side the SlidingMenu should appear on.` </div> <div class="line number483 index482 alt2"> ` ``*` </div> <div class="line number484 index483 alt1"> ` ``* @param mode` </div> <div class="line number485 index484 alt2"> ` ``* must be either SlidingMenu.LEFT or SlidingMenu.RIGHT` </div> <div class="line number486 index485 alt1"> ` ``*/` </div> <div class="line number487 index486 alt2"> ` ``public` `void` `setMode(``int` `mode) {` </div> <div class="line number488 index487 alt1"> ` ``if` `(mode != LEFT && mode != RIGHT && mode != LEFT_RIGHT) {` </div> <div class="line number489 index488 alt2"> ` ``throw` `new` `IllegalStateException(` </div> <div class="line number490 index489 alt1"> ` ``"SlidingMenu mode must be LEFT, RIGHT, or LEFT_RIGHT"``);` </div> <div class="line number491 index490 alt2"> ` ``}` </div> <div class="line number492 index491 alt1"> ` ``mViewBehind.setMode(mode);` </div> <div class="line number493 index492 alt2"> ` ``}` </div> <div class="line number494 index493 alt1"> </div> <div class="line number495 index494 alt2"> ` ``/**` </div> <div class="line number496 index495 alt1"> ` ``* Returns the current side that the SlidingMenu is on.` </div> <div class="line number497 index496 alt2"> ` ``*` </div> <div class="line number498 index497 alt1"> ` ``* @return the current mode, either SlidingMenu.LEFT or SlidingMenu.RIGHT` </div> <div class="line number499 index498 alt2"> ` ``*/` </div> <div class="line number500 index499 alt1"> ` ``public` `int` `getMode() {` </div> <div class="line number501 index500 alt2"> ` ``return` `mViewBehind.getMode();` </div> <div class="line number502 index501 alt1"> ` ``}` </div> <div class="line number503 index502 alt2"> </div> <div class="line number504 index503 alt1"> ` ``/**` </div> <div class="line number505 index504 alt2"> ` ``* Sets whether or not the SlidingMenu is in static mode (i.e. nothing is` </div> <div class="line number506 index505 alt1"> ` ``* moving and everything is showing)` </div> <div class="line number507 index506 alt2"> ` ``*` </div> <div class="line number508 index507 alt1"> ` ``* @param b` </div> <div class="line number509 index508 alt2"> ` ``* true to set static mode, false to disable static mode.` </div> <div class="line number510 index509 alt1"> ` ``*/` </div> <div class="line number511 index510 alt2"> ` ``public` `void` `setStatic(``boolean` `b) {` </div> <div class="line number512 index511 alt1"> ` ``if` `(b) {` </div> <div class="line number513 index512 alt2"> ` ``setSlidingEnabled(``false``);` </div> <div class="line number514 index513 alt1"> ` ``mViewAbove.setCustomViewBehind(``null``);` </div> <div class="line number515 index514 alt2"> ` ``mViewAbove.setCurrentItem(``1``);` </div> <div class="line number516 index515 alt1"> ` ``// mViewBehind.setCurrentItem(0);` </div> <div class="line number517 index516 alt2"> ` ``} ``else` `{` </div> <div class="line number518 index517 alt1"> ` ``mViewAbove.setCurrentItem(``1``);` </div> <div class="line number519 index518 alt2"> ` ``// mViewBehind.setCurrentItem(1);` </div> <div class="line number520 index519 alt1"> ` ``mViewAbove.setCustomViewBehind(mViewBehind);` </div> <div class="line number521 index520 alt2"> ` ``setSlidingEnabled(``true``);` </div> <div class="line number522 index521 alt1"> ` ``}` </div> <div class="line number523 index522 alt2"> ` ``}` </div> <div class="line number524 index523 alt1"> </div> <div class="line number525 index524 alt2"> ` ``/**` </div> <div class="line number526 index525 alt1"> ` ``* Opens the menu and shows the menu view.` </div> <div class="line number527 index526 alt2"> ` ``*/` </div> <div class="line number528 index527 alt1"> ` ``public` `void` `showMenu() {` </div> <div class="line number529 index528 alt2"> ` ``showMenu(``true``);` </div> <div class="line number530 index529 alt1"> ` ``}` </div> <div class="line number531 index530 alt2"> </div> <div class="line number532 index531 alt1"> ` ``/**` </div> <div class="line number533 index532 alt2"> ` ``* Opens the menu and shows the menu view.` </div> <div class="line number534 index533 alt1"> ` ``*` </div> <div class="line number535 index534 alt2"> ` ``* @param animate` </div> <div class="line number536 index535 alt1"> ` ``* true to animate the transition, false to ignore animation` </div> <div class="line number537 index536 alt2"> ` ``*/` </div> <div class="line number538 index537 alt1"> ` ``public` `void` `showMenu(``boolean` `animate) {` </div> <div class="line number539 index538 alt2"> ` ``mViewAbove.setCurrentItem(````, animate);` </div> <div class="line number540 index539 alt1"> ` ``}` </div> <div class="line number541 index540 alt2"> </div> <div class="line number542 index541 alt1"> ` ``/**` </div> <div class="line number543 index542 alt2"> ` ``* Opens the menu and shows the secondary menu view. Will default to the` </div> <div class="line number544 index543 alt1"> ` ``* regular menu if there is only one.` </div> <div class="line number545 index544 alt2"> ` ``*/` </div> <div class="line number546 index545 alt1"> ` ``public` `void` `showSecondaryMenu() {` </div> <div class="line number547 index546 alt2"> ` ``showSecondaryMenu(``true``);` </div> <div class="line number548 index547 alt1"> ` ``}` </div> <div class="line number549 index548 alt2"> </div> <div class="line number550 index549 alt1"> ` ``/**` </div> <div class="line number551 index550 alt2"> ` ``* Opens the menu and shows the secondary (right) menu view. Will default to` </div> <div class="line number552 index551 alt1"> ` ``* the regular menu if there is only one.` </div> <div class="line number553 index552 alt2"> ` ``*` </div> <div class="line number554 index553 alt1"> ` ``* @param animate` </div> <div class="line number555 index554 alt2"> ` ``* true to animate the transition, false to ignore animation` </div> <div class="line number556 index555 alt1"> ` ``*/` </div> <div class="line number557 index556 alt2"> ` ``public` `void` `showSecondaryMenu(``boolean` `animate) {` </div> <div class="line number558 index557 alt1"> ` ``mViewAbove.setCurrentItem(``2``, animate);` </div> <div class="line number559 index558 alt2"> ` ``}` </div> <div class="line number560 index559 alt1"> </div> <div class="line number561 index560 alt2"> ` ``/**` </div> <div class="line number562 index561 alt1"> ` ``* Closes the menu and shows the above view.` </div> <div class="line number563 index562 alt2"> ` ``*/` </div> <div class="line number564 index563 alt1"> ` ``public` `void` `showContent() {` </div> <div class="line number565 index564 alt2"> ` ``showContent(``true``);` </div> <div class="line number566 index565 alt1"> ` ``}` </div> <div class="line number567 index566 alt2"> </div> <div class="line number568 index567 alt1"> ` ``/**` </div> <div class="line number569 index568 alt2"> ` ``* Closes the menu and shows the above view.` </div> <div class="line number570 index569 alt1"> ` ``*` </div> <div class="line number571 index570 alt2"> ` ``* @param animate` </div> <div class="line number572 index571 alt1"> ` ``* true to animate the transition, false to ignore animation` </div> <div class="line number573 index572 alt2"> ` ``*/` </div> <div class="line number574 index573 alt1"> ` ``public` `void` `showContent(``boolean` `animate) {` </div> <div class="line number575 index574 alt2"> ` ``mViewAbove.setCurrentItem(``1``, animate);` </div> <div class="line number576 index575 alt1"> ` ``}` </div> <div class="line number577 index576 alt2"> </div> <div class="line number578 index577 alt1"> ` ``/**` </div> <div class="line number579 index578 alt2"> ` ``* Toggle the SlidingMenu. If it is open, it will be closed, and vice versa.` </div> <div class="line number580 index579 alt1"> ` ``*/` </div> <div class="line number581 index580 alt2"> ` ``public` `void` `toggle() {` </div> <div class="line number582 index581 alt1"> ` ``toggle(``true``);` </div> <div class="line number583 index582 alt2"> ` ``}` </div> <div class="line number584 index583 alt1"> </div> <div class="line number585 index584 alt2"> ` ``/**` </div> <div class="line number586 index585 alt1"> ` ``* Toggle the SlidingMenu. If it is open, it will be closed, and vice versa.` </div> <div class="line number587 index586 alt2"> ` ``*` </div> <div class="line number588 index587 alt1"> ` ``* @param animate` </div> <div class="line number589 index588 alt2"> ` ``* true to animate the transition, false to ignore animation` </div> <div class="line number590 index589 alt1"> ` ``*/` </div> <div class="line number591 index590 alt2"> ` ``public` `void` `toggle(``boolean` `animate) {` </div> <div class="line number592 index591 alt1"> ` ``if` `(isMenuShowing()) {` </div> <div class="line number593 index592 alt2"> ` ``showContent(animate);` </div> <div class="line number594 index593 alt1"> ` ``} ``else` `{` </div> <div class="line number595 index594 alt2"> ` ``showMenu(animate);` </div> <div class="line number596 index595 alt1"> ` ``}` </div> <div class="line number597 index596 alt2"> ` ``}` </div> <div class="line number598 index597 alt1"> </div> <div class="line number599 index598 alt2"> ` ``/**` </div> <div class="line number600 index599 alt1"> ` ``* Checks if is the behind view showing.` </div> <div class="line number601 index600 alt2"> ` ``*` </div> <div class="line number602 index601 alt1"> ` ``* @return Whether or not the behind view is showing` </div> <div class="line number603 index602 alt2"> ` ``*/` </div> <div class="line number604 index603 alt1"> ` ``public` `boolean` `isMenuShowing() {` </div> <div class="line number605 index604 alt2"> ` ``return` `mViewAbove.getCurrentItem() == ``` </div> <div class="line number606 index605 alt1"> ` ``|| mViewAbove.getCurrentItem() == ``2``;` </div> <div class="line number607 index606 alt2"> ` ``}` </div> <div class="line number608 index607 alt1"> </div> <div class="line number609 index608 alt2"> ` ``/**` </div> <div class="line number610 index609 alt1"> ` ``* Checks if is the behind view showing.` </div> <div class="line number611 index610 alt2"> ` ``*` </div> <div class="line number612 index611 alt1"> ` ``* @return Whether or not the behind view is showing` </div> <div class="line number613 index612 alt2"> ` ``*/` </div> <div class="line number614 index613 alt1"> ` ``public` `boolean` `isSecondaryMenuShowing() {` </div> <div class="line number615 index614 alt2"> ` ``return` `mViewAbove.getCurrentItem() == ``2``;` </div> <div class="line number616 index615 alt1"> ` ``}` </div> <div class="line number617 index616 alt2"> </div> <div class="line number618 index617 alt1"> ` ``/**` </div> <div class="line number619 index618 alt2"> ` ``* Gets the behind offset.` </div> <div class="line number620 index619 alt1"> ` ``*` </div> <div class="line number621 index620 alt2"> ` ``* @return The margin on the right of the screen that the behind view` </div> <div class="line number622 index621 alt1"> ` ``* scrolls to` </div> <div class="line number623 index622 alt2"> ` ``*/` </div> <div class="line number624 index623 alt1"> ` ``public` `int` `getBehindOffset() {` </div> <div class="line number625 index624 alt2"> ` ``return` `((RelativeLayout.LayoutParams) mViewBehind.getLayoutParams()).rightMargin;` </div> <div class="line number626 index625 alt1"> ` ``}` </div> <div class="line number627 index626 alt2"> </div> <div class="line number628 index627 alt1"> ` ``/**` </div> <div class="line number629 index628 alt2"> ` ``* Sets the behind offset.` </div> <div class="line number630 index629 alt1"> ` ``*` </div> <div class="line number631 index630 alt2"> ` ``* @param i` </div> <div class="line number632 index631 alt1"> ` ``* The margin, in pixels, on the right of the screen that the` </div> <div class="line number633 index632 alt2"> ` ``* behind view scrolls to.` </div> <div class="line number634 index633 alt1"> ` ``*/` </div> <div class="line number635 index634 alt2"> ` ``public` `void` `setBehindOffset(``int` `i) {` </div> <div class="line number636 index635 alt1"> ` ``// RelativeLayout.LayoutParams params =` </div> <div class="line number637 index636 alt2"> ` ``// ((RelativeLayout.LayoutParams)mViewBehind.getLayoutParams());` </div> <div class="line number638 index637 alt1"> ` ``// int bottom = params.bottomMargin;` </div> <div class="line number639 index638 alt2"> ` ``// int top = params.topMargin;` </div> <div class="line number640 index639 alt1"> ` ``// int left = params.leftMargin;` </div> <div class="line number641 index640 alt2"> ` ``// params.setMargins(left, top, i, bottom);` </div> <div class="line number642 index641 alt1"> ` ``mViewBehind.setWidthOffset(i);` </div> <div class="line number643 index642 alt2"> ` ``}` </div> <div class="line number644 index643 alt1"> </div> <div class="line number645 index644 alt2"> ` ``/**` </div> <div class="line number646 index645 alt1"> ` ``* Sets the behind offset.` </div> <div class="line number647 index646 alt2"> ` ``*` </div> <div class="line number648 index647 alt1"> ` ``* @param resID` </div> <div class="line number649 index648 alt2"> ` ``* The dimension resource id to be set as the behind offset. The` </div> <div class="line number650 index649 alt1"> ` ``* menu, when open, will leave this width margin on the right of` </div> <div class="line number651 index650 alt2"> ` ``* the screen.` </div> <div class="line number652 index651 alt1"> ` ``*/` </div> <div class="line number653 index652 alt2"> ` ``public` `void` `setBehindOffsetRes(``int` `resID) {` </div> <div class="line number654 index653 alt1"> ` ``int` `i = (``int``) getContext().getResources().getDimension(resID);` </div> <div class="line number655 index654 alt2"> ` ``setBehindOffset(i);` </div> <div class="line number656 index655 alt1"> ` ``}` </div> <div class="line number657 index656 alt2"> </div> <div class="line number658 index657 alt1"> ` ``/**` </div> <div class="line number659 index658 alt2"> ` ``* Sets the above offset.` </div> <div class="line number660 index659 alt1"> ` ``*` </div> <div class="line number661 index660 alt2"> ` ``* @param i` </div> <div class="line number662 index661 alt1"> ` ``* the new above offset, in pixels` </div> <div class="line number663 index662 alt2"> ` ``*/` </div> <div class="line number664 index663 alt1"> ` ``public` `void` `setAboveOffset(``int` `i) {` </div> <div class="line number665 index664 alt2"> ` ``mViewAbove.setAboveOffset(i);` </div> <div class="line number666 index665 alt1"> ` ``}` </div> <div class="line number667 index666 alt2"> </div> <div class="line number668 index667 alt1"> ` ``/**` </div> <div class="line number669 index668 alt2"> ` ``* Sets the above offset.` </div> <div class="line number670 index669 alt1"> ` ``*` </div> <div class="line number671 index670 alt2"> ` ``* @param resID` </div> <div class="line number672 index671 alt1"> ` ``* The dimension resource id to be set as the above offset.` </div> <div class="line number673 index672 alt2"> ` ``*/` </div> <div class="line number674 index673 alt1"> ` ``public` `void` `setAboveOffsetRes(``int` `resID) {` </div> <div class="line number675 index674 alt2"> ` ``int` `i = (``int``) getContext().getResources().getDimension(resID);` </div> <div class="line number676 index675 alt1"> ` ``setAboveOffset(i);` </div> <div class="line number677 index676 alt2"> ` ``}` </div> <div class="line number678 index677 alt1"> </div> <div class="line number679 index678 alt2"> ` ``/**` </div> <div class="line number680 index679 alt1"> ` ``* Sets the behind width.` </div> <div class="line number681 index680 alt2"> ` ``*` </div> <div class="line number682 index681 alt1"> ` ``* @param i` </div> <div class="line number683 index682 alt2"> ` ``* The width the Sliding Menu will open to, in pixels` </div> <div class="line number684 index683 alt1"> ` ``*/` </div> <div class="line number685 index684 alt2"> ` ``@SuppressWarnings``(``"deprecation"``)` </div> <div class="line number686 index685 alt1"> ` ``public` `void` `setBehindWidth(``int` `i) {` </div> <div class="line number687 index686 alt2"> ` ``int` `width;` </div> <div class="line number688 index687 alt1"> ` ``Display display = ((WindowManager) getContext().getSystemService(` </div> <div class="line number689 index688 alt2"> ` ``Context.WINDOW_SERVICE)).getDefaultDisplay();` </div> <div class="line number690 index689 alt1"> ` ``try` `{` </div> <div class="line number691 index690 alt2"> ` ``Class&lt;?&gt; cls = Display.``class``;` </div> <div class="line number692 index691 alt1"> ` ``Class&lt;?&gt;[] parameterTypes = { Point.``class` `};` </div> <div class="line number693 index692 alt2"> ` ``Point parameter = ``new` `Point();` </div> <div class="line number694 index693 alt1"> ` ``Method method = cls.getMethod(``"getSize"``, parameterTypes);` </div> <div class="line number695 index694 alt2"> ` ``method.invoke(display, parameter);` </div> <div class="line number696 index695 alt1"> ` ``width = parameter.x;` </div> <div class="line number697 index696 alt2"> ` ``} ``catch` `(Exception e) {` </div> <div class="line number698 index697 alt1"> ` ``width = display.getWidth();` </div> <div class="line number699 index698 alt2"> ` ``}` </div> <div class="line number700 index699 alt1"> ` ``setBehindOffset(width - i);` </div> <div class="line number701 index700 alt2"> ` ``}` </div> <div class="line number702 index701 alt1"> </div> <div class="line number703 index702 alt2"> ` ``/**` </div> <div class="line number704 index703 alt1"> ` ``* Sets the behind width.` </div> <div class="line number705 index704 alt2"> ` ``*` </div> <div class="line number706 index705 alt1"> ` ``* @param res` </div> <div class="line number707 index706 alt2"> ` ``* The dimension resource id to be set as the behind width` </div> <div class="line number708 index707 alt1"> ` ``* offset. The menu, when open, will open this wide.` </div> <div class="line number709 index708 alt2"> ` ``*/` </div> <div class="line number710 index709 alt1"> ` ``public` `void` `setBehindWidthRes(``int` `res) {` </div> <div class="line number711 index710 alt2"> ` ``int` `i = (``int``) getContext().getResources().getDimension(res);` </div> <div class="line number712 index711 alt1"> ` ``setBehindWidth(i);` </div> <div class="line number713 index712 alt2"> ` ``}` </div> <div class="line number714 index713 alt1"> </div> <div class="line number715 index714 alt2"> ` ``/**` </div> <div class="line number716 index715 alt1"> ` ``* Gets the behind scroll scale.` </div> <div class="line number717 index716 alt2"> ` ``*` </div> <div class="line number718 index717 alt1"> ` ``* @return The scale of the parallax scroll` </div> <div class="line number719 index718 alt2"> ` ``*/` </div> <div class="line number720 index719 alt1"> ` ``public` `float` `getBehindScrollScale() {` </div> <div class="line number721 index720 alt2"> ` ``return` `mViewBehind.getScrollScale();` </div> <div class="line number722 index721 alt1"> ` ``}` </div> <div class="line number723 index722 alt2"> </div> <div class="line number724 index723 alt1"> ` ``/**` </div> <div class="line number725 index724 alt2"> ` ``* Gets the touch mode margin threshold` </div> <div class="line number726 index725 alt1"> ` ``*` </div> <div class="line number727 index726 alt2"> ` ``* @return the touch mode margin threshold` </div> <div class="line number728 index727 alt1"> ` ``*/` </div> <div class="line number729 index728 alt2"> ` ``public` `int` `getTouchmodeMarginThreshold() {` </div> <div class="line number730 index729 alt1"> ` ``return` `mViewBehind.getMarginThreshold();` </div> <div class="line number731 index730 alt2"> ` ``}` </div> <div class="line number732 index731 alt1"> </div> <div class="line number733 index732 alt2"> ` ``/**` </div> <div class="line number734 index733 alt1"> ` ``* Set the touch mode margin threshold` </div> <div class="line number735 index734 alt2"> ` ``*` </div> <div class="line number736 index735 alt1"> ` ``* @param touchmodeMarginThreshold` </div> <div class="line number737 index736 alt2"> ` ``*/` </div> <div class="line number738 index737 alt1"> ` ``public` `void` `setTouchmodeMarginThreshold(``int` `touchmodeMarginThreshold) {` </div> <div class="line number739 index738 alt2"> ` ``mViewBehind.setMarginThreshold(touchmodeMarginThreshold);` </div> <div class="line number740 index739 alt1"> ` ``}` </div> <div class="line number741 index740 alt2"> </div> <div class="line number742 index741 alt1"> ` ``/**` </div> <div class="line number743 index742 alt2"> ` ``* Sets the behind scroll scale.` </div> <div class="line number744 index743 alt1"> ` ``*` </div> <div class="line number745 index744 alt2"> ` ``* @param f` </div> <div class="line number746 index745 alt1"> ` ``* The scale of the parallax scroll (i.e. 1.0f scrolls 1 pixel` </div> <div class="line number747 index746 alt2"> ` ``* for every 1 pixel that the above view scrolls and 0.0f scrolls` </div> <div class="line number748 index747 alt1"> ` ``* 0 pixels)` </div> <div class="line number749 index748 alt2"> ` ``*/` </div> <div class="line number750 index749 alt1"> ` ``public` `void` `setBehindScrollScale(``float` `f) {` </div> <div class="line number751 index750 alt2"> ` ``if` `(f &lt; ``` `&& f &gt; ``1``)` </div> <div class="line number752 index751 alt1"> ` ``throw` `new` `IllegalStateException(` </div> <div class="line number753 index752 alt2"> ` ``"ScrollScale must be between 0 and 1"``);` </div> <div class="line number754 index753 alt1"> ` ``mViewBehind.setScrollScale(f);` </div> <div class="line number755 index754 alt2"> ` ``}` </div> <div class="line number756 index755 alt1"> </div> <div class="line number757 index756 alt2"> ` ``/**` </div> <div class="line number758 index757 alt1"> ` ``* Sets the behind canvas transformer.` </div> <div class="line number759 index758 alt2"> ` ``*` </div> <div class="line number760 index759 alt1"> ` ``* @param t` </div> <div class="line number761 index760 alt2"> ` ``* the new behind canvas transformer` </div> <div class="line number762 index761 alt1"> ` ``*/` </div> <div class="line number763 index762 alt2"> ` ``public` `void` `setBehindCanvasTransformer(CanvasTransformer t) {` </div> <div class="line number764 index763 alt1"> ` ``mViewBehind.setCanvasTransformer(t);` </div> <div class="line number765 index764 alt2"> ` ``}` </div> <div class="line number766 index765 alt1"> </div> <div class="line number767 index766 alt2"> ` ``/**` </div> <div class="line number768 index767 alt1"> ` ``* 设置右侧视图的转场动画` </div> <div class="line number769 index768 alt2"> ` ``*` </div> <div class="line number770 index769 alt1"> ` ``* @param t` </div> <div class="line number771 index770 alt2"> ` ``* the new above canvas transformer` </div> <div class="line number772 index771 alt1"> ` ``*/` </div> <div class="line number773 index772 alt2"> ` ``public` `void` `setAboveCanvasTransformer(CanvasTransformer t) {` </div> <div class="line number774 index773 alt1"> ` ``mViewAbove.setCanvasTransformer(t);` </div> <div class="line number775 index774 alt2"> ` ``}` </div> <div class="line number776 index775 alt1"> </div> <div class="line number777 index776 alt2"> ` ``/**` </div> <div class="line number778 index777 alt1"> ` ``* Gets the touch mode above.` </div> <div class="line number779 index778 alt2"> ` ``*` </div> <div class="line number780 index779 alt1"> ` ``* @return the touch mode above` </div> <div class="line number781 index780 alt2"> ` ``*/` </div> <div class="line number782 index781 alt1"> ` ``public` `int` `getTouchModeAbove() {` </div> <div class="line number783 index782 alt2"> ` ``return` `mViewAbove.getTouchMode();` </div> <div class="line number784 index783 alt1"> ` ``}` </div> <div class="line number785 index784 alt2"> </div> <div class="line number786 index785 alt1"> ` ``/**` </div> <div class="line number787 index786 alt2"> ` ``* Controls whether the SlidingMenu can be opened with a swipe gesture.` </div> <div class="line number788 index787 alt1"> ` ``* Options are {@link #TOUCHMODE_MARGIN TOUCHMODE_MARGIN},` </div> <div class="line number789 index788 alt2"> ` ``* {@link #TOUCHMODE_FULLSCREEN TOUCHMODE_FULLSCREEN}, or` </div> <div class="line number790 index789 alt1"> ` ``* {@link #TOUCHMODE_NONE TOUCHMODE_NONE}` </div> <div class="line number791 index790 alt2"> ` ``*` </div> <div class="line number792 index791 alt1"> ` ``* @param i` </div> <div class="line number793 index792 alt2"> ` ``* the new touch mode` </div> <div class="line number794 index793 alt1"> ` ``*/` </div> <div class="line number795 index794 alt2"> ` ``public` `void` `setTouchModeAbove(``int` `i) {` </div> <div class="line number796 index795 alt1"> ` ``if` `(i != TOUCHMODE_FULLSCREEN && i != TOUCHMODE_MARGIN` </div> <div class="line number797 index796 alt2"> ` ``&& i != TOUCHMODE_NONE) {` </div> <div class="line number798 index797 alt1"> ` ``throw` `new` `IllegalStateException(` </div> <div class="line number799 index798 alt2"> ` ``"TouchMode must be set to either"` </div> <div class="line number800 index799 alt1"> ` ``+ ``"TOUCHMODE_FULLSCREEN or TOUCHMODE_MARGIN or TOUCHMODE_NONE."``);` </div> <div class="line number801 index800 alt2"> ` ``}` </div> <div class="line number802 index801 alt1"> ` ``mViewAbove.setTouchMode(i);` </div> <div class="line number803 index802 alt2"> ` ``}` </div> <div class="line number804 index803 alt1"> </div> <div class="line number805 index804 alt2"> ` ``/**` </div> <div class="line number806 index805 alt1"> ` ``* Controls whether the SlidingMenu can be opened with a swipe gesture.` </div> <div class="line number807 index806 alt2"> ` ``* Options are {@link #TOUCHMODE_MARGIN TOUCHMODE_MARGIN},` </div> <div class="line number808 index807 alt1"> ` ``* {@link #TOUCHMODE_FULLSCREEN TOUCHMODE_FULLSCREEN}, or` </div> <div class="line number809 index808 alt2"> ` ``* {@link #TOUCHMODE_NONE TOUCHMODE_NONE}` </div> <div class="line number810 index809 alt1"> ` ``*` </div> <div class="line number811 index810 alt2"> ` ``* @param i` </div> <div class="line number812 index811 alt1"> ` ``* the new touch mode` </div> <div class="line number813 index812 alt2"> ` ``*/` </div> <div class="line number814 index813 alt1"> ` ``public` `void` `setTouchModeBehind(``int` `i) {` </div> <div class="line number815 index814 alt2"> ` ``if` `(i != TOUCHMODE_FULLSCREEN && i != TOUCHMODE_MARGIN` </div> <div class="line number816 index815 alt1"> ` ``&& i != TOUCHMODE_NONE) {` </div> <div class="line number817 index816 alt2"> ` ``throw` `new` `IllegalStateException(` </div> <div class="line number818 index817 alt1"> ` ``"TouchMode must be set to either"` </div> <div class="line number819 index818 alt2"> ` ``+ ``"TOUCHMODE_FULLSCREEN or TOUCHMODE_MARGIN or TOUCHMODE_NONE."``);` </div> <div class="line number820 index819 alt1"> ` ``}` </div> <div class="line number821 index820 alt2"> ` ``mViewBehind.setTouchMode(i);` </div> <div class="line number822 index821 alt1"> ` ``}` </div> <div class="line number823 index822 alt2"> </div> <div class="line number824 index823 alt1"> ` ``/**` </div> <div class="line number825 index824 alt2"> ` ``* Sets the shadow drawable.` </div> <div class="line number826 index825 alt1"> ` ``*` </div> <div class="line number827 index826 alt2"> ` ``* @param resId` </div> <div class="line number828 index827 alt1"> ` ``* the resource ID of the new shadow drawable` </div> <div class="line number829 index828 alt2"> ` ``*/` </div> <div class="line number830 index829 alt1"> ` ``public` `void` `setShadowDrawable(``int` `resId) {` </div> <div class="line number831 index830 alt2"> ` ``setShadowDrawable(getContext().getResources().getDrawable(resId));` </div> <div class="line number832 index831 alt1"> ` ``}` </div> <div class="line number833 index832 alt2"> </div> <div class="line number834 index833 alt1"> ` ``/**` </div> <div class="line number835 index834 alt2"> ` ``* Sets the shadow drawable.` </div> <div class="line number836 index835 alt1"> ` ``*` </div> <div class="line number837 index836 alt2"> ` ``* @param d` </div> <div class="line number838 index837 alt1"> ` ``* the new shadow drawable` </div> <div class="line number839 index838 alt2"> ` ``*/` </div> <div class="line number840 index839 alt1"> ` ``public` `void` `setShadowDrawable(Drawable d) {` </div> <div class="line number841 index840 alt2"> ` ``mViewBehind.setShadowDrawable(d);` </div> <div class="line number842 index841 alt1"> ` ``}` </div> <div class="line number843 index842 alt2"> </div> <div class="line number844 index843 alt1"> ` ``/**` </div> <div class="line number845 index844 alt2"> ` ``* Sets the secondary (right) shadow drawable.` </div> <div class="line number846 index845 alt1"> ` ``*` </div> <div class="line number847 index846 alt2"> ` ``* @param resId` </div> <div class="line number848 index847 alt1"> ` ``* the resource ID of the new shadow drawable` </div> <div class="line number849 index848 alt2"> ` ``*/` </div> <div class="line number850 index849 alt1"> ` ``public` `void` `setSecondaryShadowDrawable(``int` `resId) {` </div> <div class="line number851 index850 alt2"> ` ``setSecondaryShadowDrawable(getContext().getResources().getDrawable(` </div> <div class="line number852 index851 alt1"> ` ``resId));` </div> <div class="line number853 index852 alt2"> ` ``}` </div> <div class="line number854 index853 alt1"> </div> <div class="line number855 index854 alt2"> ` ``/**` </div> <div class="line number856 index855 alt1"> ` ``* Sets the secondary (right) shadow drawable.` </div> <div class="line number857 index856 alt2"> ` ``*` </div> <div class="line number858 index857 alt1"> ` ``* @param d` </div> <div class="line number859 index858 alt2"> ` ``* the new shadow drawable` </div> <div class="line number860 index859 alt1"> ` ``*/` </div> <div class="line number861 index860 alt2"> ` ``public` `void` `setSecondaryShadowDrawable(Drawable d) {` </div> <div class="line number862 index861 alt1"> ` ``mViewBehind.setSecondaryShadowDrawable(d);` </div> <div class="line number863 index862 alt2"> ` ``}` </div> <div class="line number864 index863 alt1"> </div> <div class="line number865 index864 alt2"> ` ``/**` </div> <div class="line number866 index865 alt1"> ` ``* Sets the shadow width.` </div> <div class="line number867 index866 alt2"> ` ``*` </div> <div class="line number868 index867 alt1"> ` ``* @param resId` </div> <div class="line number869 index868 alt2"> ` ``* The dimension resource id to be set as the shadow width.` </div> <div class="line number870 index869 alt1"> ` ``*/` </div> <div class="line number871 index870 alt2"> ` ``public` `void` `setShadowWidthRes(``int` `resId) {` </div> <div class="line number872 index871 alt1"> ` ``setShadowWidth((``int``) getResources().getDimension(resId));` </div> <div class="line number873 index872 alt2"> ` ``}` </div> <div class="line number874 index873 alt1"> </div> <div class="line number875 index874 alt2"> ` ``/**` </div> <div class="line number876 index875 alt1"> ` ``* Sets the shadow width.` </div> <div class="line number877 index876 alt2"> ` ``*` </div> <div class="line number878 index877 alt1"> ` ``* @param pixels` </div> <div class="line number879 index878 alt2"> ` ``* the new shadow width, in pixels` </div> <div class="line number880 index879 alt1"> ` ``*/` </div> <div class="line number881 index880 alt2"> ` ``public` `void` `setShadowWidth(``int` `pixels) {` </div> <div class="line number882 index881 alt1"> ` ``mViewBehind.setShadowWidth(pixels);` </div> <div class="line number883 index882 alt2"> ` ``}` </div> <div class="line number884 index883 alt1"> </div> <div class="line number885 index884 alt2"> ` ``/**` </div> <div class="line number886 index885 alt1"> ` ``* Enables or disables the SlidingMenu's fade in and out` </div> <div class="line number887 index886 alt2"> ` ``*` </div> <div class="line number888 index887 alt1"> ` ``* @param b` </div> <div class="line number889 index888 alt2"> ` ``* true to enable fade, false to disable it` </div> <div class="line number890 index889 alt1"> ` ``*/` </div> <div class="line number891 index890 alt2"> ` ``public` `void` `setFadeEnabled(``boolean` `b) {` </div> <div class="line number892 index891 alt1"> ` ``mViewBehind.setFadeEnabled(b);` </div> <div class="line number893 index892 alt2"> ` ``}` </div> <div class="line number894 index893 alt1"> </div> <div class="line number895 index894 alt2"> ` ``/**` </div> <div class="line number896 index895 alt1"> ` ``* Sets how much the SlidingMenu fades in and out. Fade must be enabled, see` </div> <div class="line number897 index896 alt2"> ` ``* {@link #setFadeEnabled(boolean) setFadeEnabled(boolean)}` </div> <div class="line number898 index897 alt1"> ` ``*` </div> <div class="line number899 index898 alt2"> ` ``* @param f` </div> <div class="line number900 index899 alt1"> ` ``* the new fade degree, between 0.0f and 1.0f` </div> <div class="line number901 index900 alt2"> ` ``*/` </div> <div class="line number902 index901 alt1"> ` ``public` `void` `setFadeDegree(``float` `f) {` </div> <div class="line number903 index902 alt2"> ` ``mViewBehind.setFadeDegree(f);` </div> <div class="line number904 index903 alt1"> ` ``}` </div> <div class="line number905 index904 alt2"> </div> <div class="line number906 index905 alt1"> ` ``/**` </div> <div class="line number907 index906 alt2"> ` ``* Enables or disables whether the selector is drawn` </div> <div class="line number908 index907 alt1"> ` ``*` </div> <div class="line number909 index908 alt2"> ` ``* @param b` </div> <div class="line number910 index909 alt1"> ` ``* true to draw the selector, false to not draw the selector` </div> <div class="line number911 index910 alt2"> ` ``*/` </div> <div class="line number912 index911 alt1"> ` ``public` `void` `setSelectorEnabled(``boolean` `b) {` </div> <div class="line number913 index912 alt2"> ` ``mViewBehind.setSelectorEnabled(``true``);` </div> <div class="line number914 index913 alt1"> ` ``}` </div> <div class="line number915 index914 alt2"> </div> <div class="line number916 index915 alt1"> ` ``/**` </div> <div class="line number917 index916 alt2"> ` ``* Sets the selected view. The selector will be drawn here` </div> <div class="line number918 index917 alt1"> ` ``*` </div> <div class="line number919 index918 alt2"> ` ``* @param v` </div> <div class="line number920 index919 alt1"> ` ``* the new selected view` </div> <div class="line number921 index920 alt2"> ` ``*/` </div> <div class="line number922 index921 alt1"> ` ``public` `void` `setSelectedView(View v) {` </div> <div class="line number923 index922 alt2"> ` ``mViewBehind.setSelectedView(v);` </div> <div class="line number924 index923 alt1"> ` ``}` </div> <div class="line number925 index924 alt2"> </div> <div class="line number926 index925 alt1"> ` ``/**` </div> <div class="line number927 index926 alt2"> ` ``* Sets the selector drawable.` </div> <div class="line number928 index927 alt1"> ` ``*` </div> <div class="line number929 index928 alt2"> ` ``* @param res` </div> <div class="line number930 index929 alt1"> ` ``* a resource ID for the selector drawable` </div> <div class="line number931 index930 alt2"> ` ``*/` </div> <div class="line number932 index931 alt1"> ` ``public` `void` `setSelectorDrawable(``int` `res) {` </div> <div class="line number933 index932 alt2"> ` ``mViewBehind.setSelectorBitmap(BitmapFactory.decodeResource(` </div> <div class="line number934 index933 alt1"> ` ``getResources(), res));` </div> <div class="line number935 index934 alt2"> ` ``}` </div> <div class="line number936 index935 alt1"> </div> <div class="line number937 index936 alt2"> ` ``/**` </div> <div class="line number938 index937 alt1"> ` ``* Sets the selector drawable.` </div> <div class="line number939 index938 alt2"> ` ``*` </div> <div class="line number940 index939 alt1"> ` ``* @param b` </div> <div class="line number941 index940 alt2"> ` ``* the new selector bitmap` </div> <div class="line number942 index941 alt1"> ` ``*/` </div> <div class="line number943 index942 alt2"> ` ``public` `void` `setSelectorBitmap(Bitmap b) {` </div> <div class="line number944 index943 alt1"> ` ``mViewBehind.setSelectorBitmap(b);` </div> <div class="line number945 index944 alt2"> ` ``}` </div> <div class="line number946 index945 alt1"> </div> <div class="line number947 index946 alt2"> ` ``/**` </div> <div class="line number948 index947 alt1"> ` ``* Add a View ignored by the Touch Down event when mode is Fullscreen` </div> <div class="line number949 index948 alt2"> ` ``*` </div> <div class="line number950 index949 alt1"> ` ``* @param v` </div> <div class="line number951 index950 alt2"> ` ``* a view to be ignored` </div> <div class="line number952 index951 alt1"> ` ``*/` </div> <div class="line number953 index952 alt2"> ` ``public` `void` `addIgnoredView(View v) {` </div> <div class="line number954 index953 alt1"> ` ``mViewAbove.addIgnoredView(v);` </div> <div class="line number955 index954 alt2"> ` ``}` </div> <div class="line number956 index955 alt1"> </div> <div class="line number957 index956 alt2"> ` ``/**` </div> <div class="line number958 index957 alt1"> ` ``* Remove a View ignored by the Touch Down event when mode is Fullscreen` </div> <div class="line number959 index958 alt2"> ` ``*` </div> <div class="line number960 index959 alt1"> ` ``* @param v` </div> <div class="line number961 index960 alt2"> ` ``* a view not wanted to be ignored anymore` </div> <div class="line number962 index961 alt1"> ` ``*/` </div> <div class="line number963 index962 alt2"> ` ``public` `void` `removeIgnoredView(View v) {` </div> <div class="line number964 index963 alt1"> ` ``mViewAbove.removeIgnoredView(v);` </div> <div class="line number965 index964 alt2"> ` ``}` </div> <div class="line number966 index965 alt1"> </div> <div class="line number967 index966 alt2"> ` ``/**` </div> <div class="line number968 index967 alt1"> ` ``* Clear the list of Views ignored by the Touch Down event when mode is` </div> <div class="line number969 index968 alt2"> ` ``* Fullscreen` </div> <div class="line number970 index969 alt1"> ` ``*/` </div> <div class="line number971 index970 alt2"> ` ``public` `void` `clearIgnoredViews() {` </div> <div class="line number972 index971 alt1"> ` ``mViewAbove.clearIgnoredViews();` </div> <div class="line number973 index972 alt2"> ` ``}` </div> <div class="line number974 index973 alt1"> </div> <div class="line number975 index974 alt2"> ` ``/**` </div> <div class="line number976 index975 alt1"> ` ``* Sets the OnOpenListener. {@link OnOpenListener#onOpen()` </div> <div class="line number977 index976 alt2"> ` ``* OnOpenListener.onOpen()} will be called when the SlidingMenu is opened` </div> <div class="line number978 index977 alt1"> ` ``*` </div> <div class="line number979 index978 alt2"> ` ``* @param listener` </div> <div class="line number980 index979 alt1"> ` ``* the new OnOpenListener` </div> <div class="line number981 index980 alt2"> ` ``*/` </div> <div class="line number982 index981 alt1"> ` ``public` `void` `setOnOpenListener(OnOpenListener listener) {` </div> <div class="line number983 index982 alt2"> ` ``// mViewAbove.setOnOpenListener(listener);` </div> <div class="line number984 index983 alt1"> ` ``mOpenListener = listener;` </div> <div class="line number985 index984 alt2"> ` ``}` </div> <div class="line number986 index985 alt1"> </div> <div class="line number987 index986 alt2"> ` ``/**` </div> <div class="line number988 index987 alt1"> ` ``* Sets the OnOpenListner for secondary menu {@link OnOpenListener#onOpen()` </div> <div class="line number989 index988 alt2"> ` ``* OnOpenListener.onOpen()} will be called when the secondary SlidingMenu is` </div> <div class="line number990 index989 alt1"> ` ``* opened` </div> <div class="line number991 index990 alt2"> ` ``*` </div> <div class="line number992 index991 alt1"> ` ``* @param listener` </div> <div class="line number993 index992 alt2"> ` ``* the new OnOpenListener` </div> <div class="line number994 index993 alt1"> ` ``*/` </div> <div class="line number995 index994 alt2"> </div> <div class="line number996 index995 alt1"> ` ``public` `void` `setSecondaryOnOpenListner(OnOpenListener listener) {` </div> <div class="line number997 index996 alt2"> ` ``mSecondaryOpenListner = listener;` </div> <div class="line number998 index997 alt1"> ` ``}` </div> <div class="line number999 index998 alt2"> </div> <div class="line number1000 index999 alt1"> ` ``/**` </div> <div class="line number1001 index1000 alt2"> ` ``* Sets the OnCloseListener. {@link OnCloseListener#onClose()` </div> <div class="line number1002 index1001 alt1"> ` ``* OnCloseListener.onClose()} will be called when any one of the SlidingMenu` </div> <div class="line number1003 index1002 alt2"> ` ``* is closed` </div> <div class="line number1004 index1003 alt1"> ` ``*` </div> <div class="line number1005 index1004 alt2"> ` ``* @param listener` </div> <div class="line number1006 index1005 alt1"> ` ``* the new setOnCloseListener` </div> <div class="line number1007 index1006 alt2"> ` ``*/` </div> <div class="line number1008 index1007 alt1"> ` ``public` `void` `setOnCloseListener(OnCloseListener listener) {` </div> <div class="line number1009 index1008 alt2"> ` ``// mViewAbove.setOnCloseListener(listener);` </div> <div class="line number1010 index1009 alt1"> ` ``mCloseListener = listener;` </div> <div class="line number1011 index1010 alt2"> ` ``}` </div> <div class="line number1012 index1011 alt1"> </div> <div class="line number1013 index1012 alt2"> ` ``/**` </div> <div class="line number1014 index1013 alt1"> ` ``* Sets the OnOpenedListener. {@link OnOpenedListener#onOpened()` </div> <div class="line number1015 index1014 alt2"> ` ``* OnOpenedListener.onOpened()} will be called after the SlidingMenu is` </div> <div class="line number1016 index1015 alt1"> ` ``* opened` </div> <div class="line number1017 index1016 alt2"> ` ``*` </div> <div class="line number1018 index1017 alt1"> ` ``* @param listener` </div> <div class="line number1019 index1018 alt2"> ` ``* the new OnOpenedListener` </div> <div class="line number1020 index1019 alt1"> ` ``*/` </div> <div class="line number1021 index1020 alt2"> ` ``public` `void` `setOnOpenedListener(OnOpenedListener listener) {` </div> <div class="line number1022 index1021 alt1"> ` ``mViewAbove.setOnOpenedListener(listener);` </div> <div class="line number1023 index1022 alt2"> ` ``}` </div> <div class="line number1024 index1023 alt1"> </div> <div class="line number1025 index1024 alt2"> ` ``/**` </div> <div class="line number1026 index1025 alt1"> ` ``* Sets the OnClosedListener. {@link OnClosedListener#onClosed()` </div> <div class="line number1027 index1026 alt2"> ` ``* OnClosedListener.onClosed()} will be called after the SlidingMenu is` </div> <div class="line number1028 index1027 alt1"> ` ``* closed` </div> <div class="line number1029 index1028 alt2"> ` ``*` </div> <div class="line number1030 index1029 alt1"> ` ``* @param listener` </div> <div class="line number1031 index1030 alt2"> ` ``* the new OnClosedListener` </div> <div class="line number1032 index1031 alt1"> ` ``*/` </div> <div class="line number1033 index1032 alt2"> ` ``public` `void` `setOnClosedListener(OnClosedListener listener) {` </div> <div class="line number1034 index1033 alt1"> ` ``mViewAbove.setOnClosedListener(listener);` </div> <div class="line number1035 index1034 alt2"> ` ``}` </div> <div class="line number1036 index1035 alt1"> </div> <div class="line number1037 index1036 alt2"> ` ``public` `static` `class` `SavedState ``extends` `BaseSavedState {` </div> <div class="line number1038 index1037 alt1"> </div> <div class="line number1039 index1038 alt2"> ` ``private` `final` `int` `mItem;` </div> <div class="line number1040 index1039 alt1"> </div> <div class="line number1041 index1040 alt2"> ` ``public` `SavedState(Parcelable superState, ``int` `item) {` </div> <div class="line number1042 index1041 alt1"> ` ``super``(superState);` </div> <div class="line number1043 index1042 alt2"> ` ``mItem = item;` </div> <div class="line number1044 index1043 alt1"> ` ``}` </div> <div class="line number1045 index1044 alt2"> </div> <div class="line number1046 index1045 alt1"> ` ``private` `SavedState(Parcel in) {` </div> <div class="line number1047 index1046 alt2"> ` ``super``(in);` </div> <div class="line number1048 index1047 alt1"> ` ``mItem = in.readInt();` </div> <div class="line number1049 index1048 alt2"> ` ``}` </div> <div class="line number1050 index1049 alt1"> </div> <div class="line number1051 index1050 alt2"> ` ``public` `int` `getItem() {` </div> <div class="line number1052 index1051 alt1"> ` ``return` `mItem;` </div> <div class="line number1053 index1052 alt2"> ` ``}` </div> <div class="line number1054 index1053 alt1"> </div> <div class="line number1055 index1054 alt2"> ` ``/*` </div> <div class="line number1056 index1055 alt1"> ` ``* (non-Javadoc)` </div> <div class="line number1057 index1056 alt2"> ` ``*` </div> <div class="line number1058 index1057 alt1"> ` ``* @see android.view.AbsSavedState#writeToParcel(android.os.Parcel, int)` </div> <div class="line number1059 index1058 alt2"> ` ``*/` </div> <div class="line number1060 index1059 alt1"> ` ``public void writeToParcel(Parcel out, int flags) {` </div> <div class="line number1061 index1060 alt2"> ` ``super.writeToParcel(out, flags);` </div> <div class="line number1062 index1061 alt1"> ` ``out.writeInt(mItem);` </div> <div class="line number1063 index1062 alt2"> ` ``}` </div> <div class="line number1064 index1063 alt1"> </div> <div class="line number1065 index1064 alt2"> ` ``public static final Parcelable.Creator&lt;SavedState&gt; CREATOR = new Parcelable.Creator&lt;SavedState&gt;() {` </div> <div class="line number1066 index1065 alt1"> ` ``public SavedState createFromParcel(Parcel in) {` </div> <div class="line number1067 index1066 alt2"> ` ``return new SavedState(in);` </div> <div class="line number1068 index1067 alt1"> ` ``}` </div> <div class="line number1069 index1068 alt2"> </div> <div class="line number1070 index1069 alt1"> ` ``public SavedState[] newArray(int size) {` </div> <div class="line number1071 index1070 alt2"> ` ``return new SavedState[size];` </div> <div class="line number1072 index1071 alt1"> ` ``}` </div> <div class="line number1073 index1072 alt2"> ` ``};` </div> <div class="line number1074 index1073 alt1"> </div> <div class="line number1075 index1074 alt2"> ` ``}` </div> <div class="line number1076 index1075 alt1"> </div> <div class="line number1077 index1076 alt2"> ` ``/*` </div> <div class="line number1078 index1077 alt1"> ` ``* (non-Javadoc)` </div> <div class="line number1079 index1078 alt2"> ` ``*` </div> <div class="line number1080 index1079 alt1"> ` ``* @see android.view.View#onSaveInstanceState()` </div> <div class="line number1081 index1080 alt2"> ` ``*/` </div> <div class="line number1082 index1081 alt1"> ` ``@Override` </div> <div class="line number1083 index1082 alt2"> ` ``protected Parcelable onSaveInstanceState() {` </div> <div class="line number1084 index1083 alt1"> ` ``Parcelable superState = super.onSaveInstanceState();` </div> <div class="line number1085 index1084 alt2"> ` ``SavedState ss = new SavedState(superState, mViewAbove.getCurrentItem());` </div> <div class="line number1086 index1085 alt1"> ` ``return ss;` </div> <div class="line number1087 index1086 alt2"> ` ``}` </div> <div class="line number1088 index1087 alt1"> </div> <div class="line number1089 index1088 alt2"> ` ``/*` </div> <div class="line number1090 index1089 alt1"> ` ``* (non-Javadoc)` </div> <div class="line number1091 index1090 alt2"> ` ``*` </div> <div class="line number1092 index1091 alt1"> ` ``* @see android.view.View#onRestoreInstanceState(android.os.Parcelable)` </div> <div class="line number1093 index1092 alt2"> ` ``*/` </div> <div class="line number1094 index1093 alt1"> ` ``@Override` </div> <div class="line number1095 index1094 alt2"> ` ``protected void onRestoreInstanceState(Parcelable state) {` </div> <div class="line number1096 index1095 alt1"> ` ``SavedState ss = (SavedState) state;` </div> <div class="line number1097 index1096 alt2"> ` ``super.onRestoreInstanceState(ss.getSuperState());` </div> <div class="line number1098 index1097 alt1"> ` ``mViewAbove.setCurrentItem(ss.getItem());` </div> <div class="line number1099 index1098 alt2"> ` ``}` </div> <div class="line number1100 index1099 alt1"> </div> <div class="line number1101 index1100 alt2"> ` ``/*` </div> <div class="line number1102 index1101 alt1"> ` ``* (non-Javadoc)` </div> <div class="line number1103 index1102 alt2"> ` ``*` </div> <div class="line number1104 index1103 alt1"> ` ``* @see android.view.ViewGroup#fitSystemWindows(android.graphics.Rect)` </div> <div class="line number1105 index1104 alt2"> ` ``*/` </div> <div class="line number1106 index1105 alt1"> ` ``@SuppressLint``(``"NewApi"``)` </div> <div class="line number1107 index1106 alt2"> ` ``@Override` </div> <div class="line number1108 index1107 alt1"> ` ``protected` `boolean` `fitSystemWindows(Rect insets) {` </div> <div class="line number1109 index1108 alt2"> ` ``int` `leftPadding = insets.left;` </div> <div class="line number1110 index1109 alt1"> ` ``int` `rightPadding = insets.right;` </div> <div class="line number1111 index1110 alt2"> ` ``int` `topPadding = insets.top;` </div> <div class="line number1112 index1111 alt1"> ` ``int` `bottomPadding = insets.bottom;` </div> <div class="line number1113 index1112 alt2"> ` ``if` `(!mActionbarOverlay) {` </div> <div class="line number1114 index1113 alt1"> ` ``Log.v(TAG, ``"setting padding!"``);` </div> <div class="line number1115 index1114 alt2"> ` ``setPadding(leftPadding, topPadding, rightPadding, bottomPadding);` </div> <div class="line number1116 index1115 alt1"> ` ``}` </div> <div class="line number1117 index1116 alt2"> ` ``return` `true``;` </div> <div class="line number1118 index1117 alt1"> ` ``}` </div> <div class="line number1119 index1118 alt2"> </div> <div class="line number1120 index1119 alt1"> ` ``@TargetApi``(Build.VERSION_CODES.HONEYCOMB)` </div> <div class="line number1121 index1120 alt2"> ` ``public` `void` `manageLayers(``float` `percentOpen) {` </div> <div class="line number1122 index1121 alt1"> ` ``if` `(Build.VERSION.SDK_INT &lt; ``11``)` </div> <div class="line number1123 index1122 alt2"> ` ``return``;` </div> <div class="line number1124 index1123 alt1"> </div> <div class="line number1125 index1124 alt2"> ` ``boolean` `layer = percentOpen &gt; ````.0f && percentOpen &lt; ``1``.0f;` </div> <div class="line number1126 index1125 alt1"> ` ``final` `int` `layerType = layer ? View.LAYER_TYPE_HARDWARE` </div> <div class="line number1127 index1126 alt2"> ` ``: View.LAYER_TYPE_NONE;` </div> <div class="line number1128 index1127 alt1"> </div> <div class="line number1129 index1128 alt2"> ` ``if` `(layerType != getContent().getLayerType()) {` </div> <div class="line number1130 index1129 alt1"> ` ``getHandler().post(``new` `Runnable() {` </div> <div class="line number1131 index1130 alt2"> ` ``public` `void` `run() {` </div> <div class="line number1132 index1131 alt1"> ` ``Log.v(TAG, ``"changing layerType. hardware? "` </div> <div class="line number1133 index1132 alt2"> ` ``+ (layerType == View.LAYER_TYPE_HARDWARE));` </div> <div class="line number1134 index1133 alt1"> ` ``getContent().setLayerType(layerType, ``null``);` </div> <div class="line number1135 index1134 alt2"> ` ``getMenu().setLayerType(layerType, ``null``);` </div> <div class="line number1136 index1135 alt1"> ` ``if` `(getSecondaryMenu() != ``null``) {` </div> <div class="line number1137 index1136 alt2"> ` ``getSecondaryMenu().setLayerType(layerType, ``null``);` </div> <div class="line number1138 index1137 alt1"> ` ``}` </div> <div class="line number1139 index1138 alt2"> ` ``}` </div> <div class="line number1140 index1139 alt1"> ` ``});` </div> <div class="line number1141 index1140 alt2"> ` ``}` </div> <div class="line number1142 index1141 alt1"> ` ``}` </div> <div class="line number1143 index1142 alt2"> </div> <div class="line number1144 index1143 alt1"> `}` </div> </div> </td> </tr> </table> [?](http://www.open-open.com/lib/view/open1411269966859.html#) <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> <div class="line number26 index25 alt1"> 26 </div> <div class="line number27 index26 alt2"> 27 </div> <div class="line number28 index27 alt1"> 28 </div> <div class="line number29 index28 alt2"> 29 </div> <div class="line number30 index29 alt1"> 30 </div> <div class="line number31 index30 alt2"> 31 </div> <div class="line number32 index31 alt1"> 32 </div> <div class="line number33 index32 alt2"> 33 </div> <div class="line number34 index33 alt1"> 34 </div> <div class="line number35 index34 alt2"> 35 </div> <div class="line number36 index35 alt1"> 36 </div> <div class="line number37 index36 alt2"> 37 </div> <div class="line number38 index37 alt1"> 38 </div> <div class="line number39 index38 alt2"> 39 </div> <div class="line number40 index39 alt1"> 40 </div> <div class="line number41 index40 alt2"> 41 </div> <div class="line number42 index41 alt1"> 42 </div> <div class="line number43 index42 alt2"> 43 </div> <div class="line number44 index43 alt1"> 44 </div> <div class="line number45 index44 alt2"> 45 </div> <div class="line number46 index45 alt1"> 46 </div> <div class="line number47 index46 alt2"> 47 </div> <div class="line number48 index47 alt1"> 48 </div> <div class="line number49 index48 alt2"> 49 </div> <div class="line number50 index49 alt1"> 50 </div> <div class="line number51 index50 alt2"> 51 </div> <div class="line number52 index51 alt1"> 52 </div> <div class="line number53 index52 alt2"> 53 </div> <div class="line number54 index53 alt1"> 54 </div> <div class="line number55 index54 alt2"> 55 </div> <div class="line number56 index55 alt1"> 56 </div> <div class="line number57 index56 alt2"> 57 </div> <div class="line number58 index57 alt1"> 58 </div> <div class="line number59 index58 alt2"> 59 </div> <div class="line number60 index59 alt1"> 60 </div> <div class="line number61 index60 alt2"> 61 </div> <div class="line number62 index61 alt1"> 62 </div> <div class="line number63 index62 alt2"> 63 </div> <div class="line number64 index63 alt1"> 64 </div> <div class="line number65 index64 alt2"> 65 </div> <div class="line number66 index65 alt1"> 66 </div> <div class="line number67 index66 alt2"> 67 </div> <div class="line number68 index67 alt1"> 68 </div> <div class="line number69 index68 alt2"> 69 </div> <div class="line number70 index69 alt1"> 70 </div> <div class="line number71 index70 alt2"> 71 </div> <div class="line number72 index71 alt1"> 72 </div> <div class="line number73 index72 alt2"> 73 </div> <div class="line number74 index73 alt1"> 74 </div> <div class="line number75 index74 alt2"> 75 </div> <div class="line number76 index75 alt1"> 76 </div> <div class="line number77 index76 alt2"> 77 </div> <div class="line number78 index77 alt1"> 78 </div> <div class="line number79 index78 alt2"> 79 </div> <div class="line number80 index79 alt1"> 80 </div> <div class="line number81 index80 alt2"> 81 </div> <div class="line number82 index81 alt1"> 82 </div> <div class="line number83 index82 alt2"> 83 </div> <div class="line number84 index83 alt1"> 84 </div> <div class="line number85 index84 alt2"> 85 </div> <div class="line number86 index85 alt1"> 86 </div> <div class="line number87 index86 alt2"> 87 </div> <div class="line number88 index87 alt1"> 88 </div> <div class="line number89 index88 alt2"> 89 </div> <div class="line number90 index89 alt1"> 90 </div> <div class="line number91 index90 alt2"> 91 </div> <div class="line number92 index91 alt1"> 92 </div> <div class="line number93 index92 alt2"> 93 </div> <div class="line number94 index93 alt1"> 94 </div> <div class="line number95 index94 alt2"> 95 </div> <div class="line number96 index95 alt1"> 96 </div> <div class="line number97 index96 alt2"> 97 </div> <div class="line number98 index97 alt1"> 98 </div> <div class="line number99 index98 alt2"> 99 </div> <div class="line number100 index99 alt1"> 100 </div> <div class="line number101 index100 alt2"> 101 </div> <div class="line number102 index101 alt1"> 102 </div> <div class="line number103 index102 alt2"> 103 </div> <div class="line number104 index103 alt1"> 104 </div> <div class="line number105 index104 alt2"> 105 </div> <div class="line number106 index105 alt1"> 106 </div> <div class="line number107 index106 alt2"> 107 </div> <div class="line number108 index107 alt1"> 108 </div> <div class="line number109 index108 alt2"> 109 </div> <div class="line number110 index109 alt1"> 110 </div> <div class="line number111 index110 alt2"> 111 </div> <div class="line number112 index111 alt1"> 112 </div> <div class="line number113 index112 alt2"> 113 </div> <div class="line number114 index113 alt1"> 114 </div> <div class="line number115 index114 alt2"> 115 </div> <div class="line number116 index115 alt1"> 116 </div> <div class="line number117 index116 alt2"> 117 </div> <div class="line number118 index117 alt1"> 118 </div> <div class="line number119 index118 alt2"> 119 </div> <div class="line number120 index119 alt1"> 120 </div> <div class="line number121 index120 alt2"> 121 </div> <div class="line number122 index121 alt1"> 122 </div> <div class="line number123 index122 alt2"> 123 </div> <div class="line number124 index123 alt1"> 124 </div> <div class="line number125 index124 alt2"> 125 </div> <div class="line number126 index125 alt1"> 126 </div> <div class="line number127 index126 alt2"> 127 </div> <div class="line number128 index127 alt1"> 128 </div> <div class="line number129 index128 alt2"> 129 </div> <div class="line number130 index129 alt1"> 130 </div> <div class="line number131 index130 alt2"> 131 </div> <div class="line number132 index131 alt1"> 132 </div> <div class="line number133 index132 alt2"> 133 </div> <div class="line number134 index133 alt1"> 134 </div> <div class="line number135 index134 alt2"> 135 </div> <div class="line number136 index135 alt1"> 136 </div> <div class="line number137 index136 alt2"> 137 </div> <div class="line number138 index137 alt1"> 138 </div> <div class="line number139 index138 alt2"> 139 </div> <div class="line number140 index139 alt1"> 140 </div> <div class="line number141 index140 alt2"> 141 </div> <div class="line number142 index141 alt1"> 142 </div> <div class="line number143 index142 alt2"> 143 </div> <div class="line number144 index143 alt1"> 144 </div> <div class="line number145 index144 alt2"> 145 </div> <div class="line number146 index145 alt1"> 146 </div> <div class="line number147 index146 alt2"> 147 </div> <div class="line number148 index147 alt1"> 148 </div> <div class="line number149 index148 alt2"> 149 </div> <div class="line number150 index149 alt1"> 150 </div> <div class="line number151 index150 alt2"> 151 </div> <div class="line number152 index151 alt1"> 152 </div> <div class="line number153 index152 alt2"> 153 </div> <div class="line number154 index153 alt1"> 154 </div> <div class="line number155 index154 alt2"> 155 </div> <div class="line number156 index155 alt1"> 156 </div> <div class="line number157 index156 alt2"> 157 </div> <div class="line number158 index157 alt1"> 158 </div> <div class="line number159 index158 alt2"> 159 </div> <div class="line number160 index159 alt1"> 160 </div> <div class="line number161 index160 alt2"> 161 </div> <div class="line number162 index161 alt1"> 162 </div> <div class="line number163 index162 alt2"> 163 </div> <div class="line number164 index163 alt1"> 164 </div> <div class="line number165 index164 alt2"> 165 </div> <div class="line number166 index165 alt1"> 166 </div> <div class="line number167 index166 alt2"> 167 </div> <div class="line number168 index167 alt1"> 168 </div> <div class="line number169 index168 alt2"> 169 </div> <div class="line number170 index169 alt1"> 170 </div> <div class="line number171 index170 alt2"> 171 </div> <div class="line number172 index171 alt1"> 172 </div> <div class="line number173 index172 alt2"> 173 </div> <div class="line number174 index173 alt1"> 174 </div> <div class="line number175 index174 alt2"> 175 </div> <div class="line number176 index175 alt1"> 176 </div> <div class="line number177 index176 alt2"> 177 </div> <div class="line number178 index177 alt1"> 178 </div> <div class="line number179 index178 alt2"> 179 </div> <div class="line number180 index179 alt1"> 180 </div> <div class="line number181 index180 alt2"> 181 </div> <div class="line number182 index181 alt1"> 182 </div> <div class="line number183 index182 alt2"> 183 </div> <div class="line number184 index183 alt1"> 184 </div> <div class="line number185 index184 alt2"> 185 </div> <div class="line number186 index185 alt1"> 186 </div> <div class="line number187 index186 alt2"> 187 </div> <div class="line number188 index187 alt1"> 188 </div> <div class="line number189 index188 alt2"> 189 </div> <div class="line number190 index189 alt1"> 190 </div> <div class="line number191 index190 alt2"> 191 </div> <div class="line number192 index191 alt1"> 192 </div> <div class="line number193 index192 alt2"> 193 </div> <div class="line number194 index193 alt1"> 194 </div> <div class="line number195 index194 alt2"> 195 </div> <div class="line number196 index195 alt1"> 196 </div> <div class="line number197 index196 alt2"> 197 </div> <div class="line number198 index197 alt1"> 198 </div> <div class="line number199 index198 alt2"> 199 </div> <div class="line number200 index199 alt1"> 200 </div> <div class="line number201 index200 alt2"> 201 </div> <div class="line number202 index201 alt1"> 202 </div> <div class="line number203 index202 alt2"> 203 </div> <div class="line number204 index203 alt1"> 204 </div> <div class="line number205 index204 alt2"> 205 </div> <div class="line number206 index205 alt1"> 206 </div> <div class="line number207 index206 alt2"> 207 </div> <div class="line number208 index207 alt1"> 208 </div> <div class="line number209 index208 alt2"> 209 </div> <div class="line number210 index209 alt1"> 210 </div> <div class="line number211 index210 alt2"> 211 </div> <div class="line number212 index211 alt1"> 212 </div> <div class="line number213 index212 alt2"> 213 </div> <div class="line number214 index213 alt1"> 214 </div> <div class="line number215 index214 alt2"> 215 </div> <div class="line number216 index215 alt1"> 216 </div> <div class="line number217 index216 alt2"> 217 </div> <div class="line number218 index217 alt1"> 218 </div> <div class="line number219 index218 alt2"> 219 </div> <div class="line number220 index219 alt1"> 220 </div> <div class="line number221 index220 alt2"> 221 </div> <div class="line number222 index221 alt1"> 222 </div> <div class="line number223 index222 alt2"> 223 </div> <div class="line number224 index223 alt1"> 224 </div> <div class="line number225 index224 alt2"> 225 </div> <div class="line number226 index225 alt1"> 226 </div> <div class="line number227 index226 alt2"> 227 </div> <div class="line number228 index227 alt1"> 228 </div> <div class="line number229 index228 alt2"> 229 </div> <div class="line number230 index229 alt1"> 230 </div> <div class="line number231 index230 alt2"> 231 </div> <div class="line number232 index231 alt1"> 232 </div> <div class="line number233 index232 alt2"> 233 </div> <div class="line number234 index233 alt1"> 234 </div> <div class="line number235 index234 alt2"> 235 </div> <div class="line number236 index235 alt1"> 236 </div> <div class="line number237 index236 alt2"> 237 </div> <div class="line number238 index237 alt1"> 238 </div> <div class="line number239 index238 alt2"> 239 </div> <div class="line number240 index239 alt1"> 240 </div> <div class="line number241 index240 alt2"> 241 </div> <div class="line number242 index241 alt1"> 242 </div> <div class="line number243 index242 alt2"> 243 </div> <div class="line number244 index243 alt1"> 244 </div> <div class="line number245 index244 alt2"> 245 </div> <div class="line number246 index245 alt1"> 246 </div> <div class="line number247 index246 alt2"> 247 </div> <div class="line number248 index247 alt1"> 248 </div> <div class="line number249 index248 alt2"> 249 </div> <div class="line number250 index249 alt1"> 250 </div> <div class="line number251 index250 alt2"> 251 </div> <div class="line number252 index251 alt1"> 252 </div> <div class="line number253 index252 alt2"> 253 </div> <div class="line number254 index253 alt1"> 254 </div> <div class="line number255 index254 alt2"> 255 </div> <div class="line number256 index255 alt1"> 256 </div> <div class="line number257 index256 alt2"> 257 </div> <div class="line number258 index257 alt1"> 258 </div> <div class="line number259 index258 alt2"> 259 </div> <div class="line number260 index259 alt1"> 260 </div> <div class="line number261 index260 alt2"> 261 </div> <div class="line number262 index261 alt1"> 262 </div> <div class="line number263 index262 alt2"> 263 </div> <div class="line number264 index263 alt1"> 264 </div> <div class="line number265 index264 alt2"> 265 </div> <div class="line number266 index265 alt1"> 266 </div> <div class="line number267 index266 alt2"> 267 </div> <div class="line number268 index267 alt1"> 268 </div> <div class="line number269 index268 alt2"> 269 </div> <div class="line number270 index269 alt1"> 270 </div> <div class="line number271 index270 alt2"> 271 </div> <div class="line number272 index271 alt1"> 272 </div> <div class="line number273 index272 alt2"> 273 </div> <div class="line number274 index273 alt1"> 274 </div> <div class="line number275 index274 alt2"> 275 </div> <div class="line number276 index275 alt1"> 276 </div> <div class="line number277 index276 alt2"> 277 </div> <div class="line number278 index277 alt1"> 278 </div> <div class="line number279 index278 alt2"> 279 </div> <div class="line number280 index279 alt1"> 280 </div> <div class="line number281 index280 alt2"> 281 </div> <div class="line number282 index281 alt1"> 282 </div> <div class="line number283 index282 alt2"> 283 </div> <div class="line number284 index283 alt1"> 284 </div> <div class="line number285 index284 alt2"> 285 </div> <div class="line number286 index285 alt1"> 286 </div> <div class="line number287 index286 alt2"> 287 </div> <div class="line number288 index287 alt1"> 288 </div> <div class="line number289 index288 alt2"> 289 </div> <div class="line number290 index289 alt1"> 290 </div> <div class="line number291 index290 alt2"> 291 </div> <div class="line number292 index291 alt1"> 292 </div> <div class="line number293 index292 alt2"> 293 </div> <div class="line number294 index293 alt1"> 294 </div> <div class="line number295 index294 alt2"> 295 </div> <div class="line number296 index295 alt1"> 296 </div> <div class="line number297 index296 alt2"> 297 </div> <div class="line number298 index297 alt1"> 298 </div> <div class="line number299 index298 alt2"> 299 </div> <div class="line number300 index299 alt1"> 300 </div> <div class="line number301 index300 alt2"> 301 </div> <div class="line number302 index301 alt1"> 302 </div> <div class="line number303 index302 alt2"> 303 </div> <div class="line number304 index303 alt1"> 304 </div> <div class="line number305 index304 alt2"> 305 </div> <div class="line number306 index305 alt1"> 306 </div> <div class="line number307 index306 alt2"> 307 </div> <div class="line number308 index307 alt1"> 308 </div> <div class="line number309 index308 alt2"> 309 </div> <div class="line number310 index309 alt1"> 310 </div> <div class="line number311 index310 alt2"> 311 </div> <div class="line number312 index311 alt1"> 312 </div> <div class="line number313 index312 alt2"> 313 </div> <div class="line number314 index313 alt1"> 314 </div> <div class="line number315 index314 alt2"> 315 </div> <div class="line number316 index315 alt1"> 316 </div> <div class="line number317 index316 alt2"> 317 </div> <div class="line number318 index317 alt1"> 318 </div> <div class="line number319 index318 alt2"> 319 </div> <div class="line number320 index319 alt1"> 320 </div> <div class="line number321 index320 alt2"> 321 </div> <div class="line number322 index321 alt1"> 322 </div> <div class="line number323 index322 alt2"> 323 </div> <div class="line number324 index323 alt1"> 324 </div> <div class="line number325 index324 alt2"> 325 </div> <div class="line number326 index325 alt1"> 326 </div> <div class="line number327 index326 alt2"> 327 </div> <div class="line number328 index327 alt1"> 328 </div> <div class="line number329 index328 alt2"> 329 </div> <div class="line number330 index329 alt1"> 330 </div> <div class="line number331 index330 alt2"> 331 </div> <div class="line number332 index331 alt1"> 332 </div> <div class="line number333 index332 alt2"> 333 </div> <div class="line number334 index333 alt1"> 334 </div> <div class="line number335 index334 alt2"> 335 </div> <div class="line number336 index335 alt1"> 336 </div> <div class="line number337 index336 alt2"> 337 </div> <div class="line number338 index337 alt1"> 338 </div> <div class="line number339 index338 alt2"> 339 </div> <div class="line number340 index339 alt1"> 340 </div> <div class="line number341 index340 alt2"> 341 </div> <div class="line number342 index341 alt1"> 342 </div> <div class="line number343 index342 alt2"> 343 </div> <div class="line number344 index343 alt1"> 344 </div> <div class="line number345 index344 alt2"> 345 </div> <div class="line number346 index345 alt1"> 346 </div> <div class="line number347 index346 alt2"> 347 </div> <div class="line number348 index347 alt1"> 348 </div> <div class="line number349 index348 alt2"> 349 </div> <div class="line number350 index349 alt1"> 350 </div> <div class="line number351 index350 alt2"> 351 </div> <div class="line number352 index351 alt1"> 352 </div> <div class="line number353 index352 alt2"> 353 </div> <div class="line number354 index353 alt1"> 354 </div> <div class="line number355 index354 alt2"> 355 </div> <div class="line number356 index355 alt1"> 356 </div> <div class="line number357 index356 alt2"> 357 </div> <div class="line number358 index357 alt1"> 358 </div> <div class="line number359 index358 alt2"> 359 </div> <div class="line number360 index359 alt1"> 360 </div> <div class="line number361 index360 alt2"> 361 </div> <div class="line number362 index361 alt1"> 362 </div> <div class="line number363 index362 alt2"> 363 </div> <div class="line number364 index363 alt1"> 364 </div> <div class="line number365 index364 alt2"> 365 </div> <div class="line number366 index365 alt1"> 366 </div> <div class="line number367 index366 alt2"> 367 </div> <div class="line number368 index367 alt1"> 368 </div> <div class="line number369 index368 alt2"> 369 </div> <div class="line number370 index369 alt1"> 370 </div> <div class="line number371 index370 alt2"> 371 </div> <div class="line number372 index371 alt1"> 372 </div> <div class="line number373 index372 alt2"> 373 </div> <div class="line number374 index373 alt1"> 374 </div> <div class="line number375 index374 alt2"> 375 </div> <div class="line number376 index375 alt1"> 376 </div> <div class="line number377 index376 alt2"> 377 </div> <div class="line number378 index377 alt1"> 378 </div> <div class="line number379 index378 alt2"> 379 </div> <div class="line number380 index379 alt1"> 380 </div> <div class="line number381 index380 alt2"> 381 </div> <div class="line number382 index381 alt1"> 382 </div> <div class="line number383 index382 alt2"> 383 </div> <div class="line number384 index383 alt1"> 384 </div> <div class="line number385 index384 alt2"> 385 </div> <div class="line number386 index385 alt1"> 386 </div> <div class="line number387 index386 alt2"> 387 </div> <div class="line number388 index387 alt1"> 388 </div> <div class="line number389 index388 alt2"> 389 </div> <div class="line number390 index389 alt1"> 390 </div> <div class="line number391 index390 alt2"> 391 </div> <div class="line number392 index391 alt1"> 392 </div> <div class="line number393 index392 alt2"> 393 </div> <div class="line number394 index393 alt1"> 394 </div> <div class="line number395 index394 alt2"> 395 </div> <div class="line number396 index395 alt1"> 396 </div> <div class="line number397 index396 alt2"> 397 </div> <div class="line number398 index397 alt1"> 398 </div> <div class="line number399 index398 alt2"> 399 </div> <div class="line number400 index399 alt1"> 400 </div> <div class="line number401 index400 alt2"> 401 </div> <div class="line number402 index401 alt1"> 402 </div> <div class="line number403 index402 alt2"> 403 </div> <div class="line number404 index403 alt1"> 404 </div> <div class="line number405 index404 alt2"> 405 </div> <div class="line number406 index405 alt1"> 406 </div> <div class="line number407 index406 alt2"> 407 </div> <div class="line number408 index407 alt1"> 408 </div> <div class="line number409 index408 alt2"> 409 </div> <div class="line number410 index409 alt1"> 410 </div> <div class="line number411 index410 alt2"> 411 </div> <div class="line number412 index411 alt1"> 412 </div> <div class="line number413 index412 alt2"> 413 </div> <div class="line number414 index413 alt1"> 414 </div> <div class="line number415 index414 alt2"> 415 </div> <div class="line number416 index415 alt1"> 416 </div> <div class="line number417 index416 alt2"> 417 </div> <div class="line number418 index417 alt1"> 418 </div> <div class="line number419 index418 alt2"> 419 </div> <div class="line number420 index419 alt1"> 420 </div> <div class="line number421 index420 alt2"> 421 </div> <div class="line number422 index421 alt1"> 422 </div> <div class="line number423 index422 alt2"> 423 </div> <div class="line number424 index423 alt1"> 424 </div> <div class="line number425 index424 alt2"> 425 </div> <div class="line number426 index425 alt1"> 426 </div> <div class="line number427 index426 alt2"> 427 </div> <div class="line number428 index427 alt1"> 428 </div> <div class="line number429 index428 alt2"> 429 </div> <div class="line number430 index429 alt1"> 430 </div> <div class="line number431 index430 alt2"> 431 </div> <div class="line number432 index431 alt1"> 432 </div> <div class="line number433 index432 alt2"> 433 </div> <div class="line number434 index433 alt1"> 434 </div> <div class="line number435 index434 alt2"> 435 </div> <div class="line number436 index435 alt1"> 436 </div> <div class="line number437 index436 alt2"> 437 </div> <div class="line number438 index437 alt1"> 438 </div> <div class="line number439 index438 alt2"> 439 </div> <div class="line number440 index439 alt1"> 440 </div> <div class="line number441 index440 alt2"> 441 </div> <div class="line number442 index441 alt1"> 442 </div> <div class="line number443 index442 alt2"> 443 </div> <div class="line number444 index443 alt1"> 444 </div> <div class="line number445 index444 alt2"> 445 </div> <div class="line number446 index445 alt1"> 446 </div> <div class="line number447 index446 alt2"> 447 </div> <div class="line number448 index447 alt1"> 448 </div> <div class="line number449 index448 alt2"> 449 </div> <div class="line number450 index449 alt1"> 450 </div> <div class="line number451 index450 alt2"> 451 </div> <div class="line number452 index451 alt1"> 452 </div> <div class="line number453 index452 alt2"> 453 </div> <div class="line number454 index453 alt1"> 454 </div> <div class="line number455 index454 alt2"> 455 </div> <div class="line number456 index455 alt1"> 456 </div> <div class="line number457 index456 alt2"> 457 </div> <div class="line number458 index457 alt1"> 458 </div> <div class="line number459 index458 alt2"> 459 </div> <div class="line number460 index459 alt1"> 460 </div> <div class="line number461 index460 alt2"> 461 </div> <div class="line number462 index461 alt1"> 462 </div> <div class="line number463 index462 alt2"> 463 </div> <div class="line number464 index463 alt1"> 464 </div> <div class="line number465 index464 alt2"> 465 </div> <div class="line number466 index465 alt1"> 466 </div> <div class="line number467 index466 alt2"> 467 </div> <div class="line number468 index467 alt1"> 468 </div> <div class="line number469 index468 alt2"> 469 </div> <div class="line number470 index469 alt1"> 470 </div> <div class="line number471 index470 alt2"> 471 </div> <div class="line number472 index471 alt1"> 472 </div> <div class="line number473 index472 alt2"> 473 </div> <div class="line number474 index473 alt1"> 474 </div> <div class="line number475 index474 alt2"> 475 </div> <div class="line number476 index475 alt1"> 476 </div> <div class="line number477 index476 alt2"> 477 </div> <div class="line number478 index477 alt1"> 478 </div> <div class="line number479 index478 alt2"> 479 </div> <div class="line number480 index479 alt1"> 480 </div> <div class="line number481 index480 alt2"> 481 </div> <div class="line number482 index481 alt1"> 482 </div> <div class="line number483 index482 alt2"> 483 </div> <div class="line number484 index483 alt1"> 484 </div> <div class="line number485 index484 alt2"> 485 </div> <div class="line number486 index485 alt1"> 486 </div> <div class="line number487 index486 alt2"> 487 </div> <div class="line number488 index487 alt1"> 488 </div> <div class="line number489 index488 alt2"> 489 </div> <div class="line number490 index489 alt1"> 490 </div> <div class="line number491 index490 alt2"> 491 </div> <div class="line number492 index491 alt1"> 492 </div> <div class="line number493 index492 alt2"> 493 </div> <div class="line number494 index493 alt1"> 494 </div> <div class="line number495 index494 alt2"> 495 </div> <div class="line number496 index495 alt1"> 496 </div> <div class="line number497 index496 alt2"> 497 </div> <div class="line number498 index497 alt1"> 498 </div> <div class="line number499 index498 alt2"> 499 </div> <div class="line number500 index499 alt1"> 500 </div> <div class="line number501 index500 alt2"> 501 </div> <div class="line number502 index501 alt1"> 502 </div> <div class="line number503 index502 alt2"> 503 </div> <div class="line number504 index503 alt1"> 504 </div> <div class="line number505 index504 alt2"> 505 </div> <div class="line number506 index505 alt1"> 506 </div> <div class="line number507 index506 alt2"> 507 </div> <div class="line number508 index507 alt1"> 508 </div> <div class="line number509 index508 alt2"> 509 </div> <div class="line number510 index509 alt1"> 510 </div> <div class="line number511 index510 alt2"> 511 </div> <div class="line number512 index511 alt1"> 512 </div> <div class="line number513 index512 alt2"> 513 </div> <div class="line number514 index513 alt1"> 514 </div> <div class="line number515 index514 alt2"> 515 </div> <div class="line number516 index515 alt1"> 516 </div> <div class="line number517 index516 alt2"> 517 </div> <div class="line number518 index517 alt1"> 518 </div> <div class="line number519 index518 alt2"> 519 </div> <div class="line number520 index519 alt1"> 520 </div> <div class="line number521 index520 alt2"> 521 </div> <div class="line number522 index521 alt1"> 522 </div> <div class="line number523 index522 alt2"> 523 </div> <div class="line number524 index523 alt1"> 524 </div> <div class="line number525 index524 alt2"> 525 </div> <div class="line number526 index525 alt1"> 526 </div> <div class="line number527 index526 alt2"> 527 </div> <div class="line number528 index527 alt1"> 528 </div> <div class="line number529 index528 alt2"> 529 </div> <div class="line number530 index529 alt1"> 530 </div> <div class="line number531 index530 alt2"> 531 </div> <div class="line number532 index531 alt1"> 532 </div> <div class="line number533 index532 alt2"> 533 </div> <div class="line number534 index533 alt1"> 534 </div> <div class="line number535 index534 alt2"> 535 </div> <div class="line number536 index535 alt1"> 536 </div> <div class="line number537 index536 alt2"> 537 </div> <div class="line number538 index537 alt1"> 538 </div> <div class="line number539 index538 alt2"> 539 </div> <div class="line number540 index539 alt1"> 540 </div> <div class="line number541 index540 alt2"> 541 </div> <div class="line number542 index541 alt1"> 542 </div> <div class="line number543 index542 alt2"> 543 </div> <div class="line number544 index543 alt1"> 544 </div> <div class="line number545 index544 alt2"> 545 </div> <div class="line number546 index545 alt1"> 546 </div> <div class="line number547 index546 alt2"> 547 </div> <div class="line number548 index547 alt1"> 548 </div> <div class="line number549 index548 alt2"> 549 </div> <div class="line number550 index549 alt1"> 550 </div> <div class="line number551 index550 alt2"> 551 </div> <div class="line number552 index551 alt1"> 552 </div> <div class="line number553 index552 alt2"> 553 </div> <div class="line number554 index553 alt1"> 554 </div> <div class="line number555 index554 alt2"> 555 </div> <div class="line number556 index555 alt1"> 556 </div> <div class="line number557 index556 alt2"> 557 </div> <div class="line number558 index557 alt1"> 558 </div> <div class="line number559 index558 alt2"> 559 </div> <div class="line number560 index559 alt1"> 560 </div> <div class="line number561 index560 alt2"> 561 </div> <div class="line number562 index561 alt1"> 562 </div> <div class="line number563 index562 alt2"> 563 </div> <div class="line number564 index563 alt1"> 564 </div> <div class="line number565 index564 alt2"> 565 </div> <div class="line number566 index565 alt1"> 566 </div> <div class="line number567 index566 alt2"> 567 </div> <div class="line number568 index567 alt1"> 568 </div> <div class="line number569 index568 alt2"> 569 </div> <div class="line number570 index569 alt1"> 570 </div> <div class="line number571 index570 alt2"> 571 </div> <div class="line number572 index571 alt1"> 572 </div> <div class="line number573 index572 alt2"> 573 </div> <div class="line number574 index573 alt1"> 574 </div> <div class="line number575 index574 alt2"> 575 </div> <div class="line number576 index575 alt1"> 576 </div> <div class="line number577 index576 alt2"> 577 </div> <div class="line number578 index577 alt1"> 578 </div> <div class="line number579 index578 alt2"> 579 </div> <div class="line number580 index579 alt1"> 580 </div> <div class="line number581 index580 alt2"> 581 </div> <div class="line number582 index581 alt1"> 582 </div> <div class="line number583 index582 alt2"> 583 </div> <div class="line number584 index583 alt1"> 584 </div> <div class="line number585 index584 alt2"> 585 </div> <div class="line number586 index585 alt1"> 586 </div> <div class="line number587 index586 alt2"> 587 </div> <div class="line number588 index587 alt1"> 588 </div> <div class="line number589 index588 alt2"> 589 </div> <div class="line number590 index589 alt1"> 590 </div> <div class="line number591 index590 alt2"> 591 </div> <div class="line number592 index591 alt1"> 592 </div> <div class="line number593 index592 alt2"> 593 </div> <div class="line number594 index593 alt1"> 594 </div> <div class="line number595 index594 alt2"> 595 </div> <div class="line number596 index595 alt1"> 596 </div> <div class="line number597 index596 alt2"> 597 </div> <div class="line number598 index597 alt1"> 598 </div> <div class="line number599 index598 alt2"> 599 </div> <div class="line number600 index599 alt1"> 600 </div> <div class="line number601 index600 alt2"> 601 </div> <div class="line number602 index601 alt1"> 602 </div> <div class="line number603 index602 alt2"> 603 </div> <div class="line number604 index603 alt1"> 604 </div> <div class="line number605 index604 alt2"> 605 </div> <div class="line number606 index605 alt1"> 606 </div> <div class="line number607 index606 alt2"> 607 </div> <div class="line number608 index607 alt1"> 608 </div> <div class="line number609 index608 alt2"> 609 </div> <div class="line number610 index609 alt1"> 610 </div> <div class="line number611 index610 alt2"> 611 </div> <div class="line number612 index611 alt1"> 612 </div> <div class="line number613 index612 alt2"> 613 </div> <div class="line number614 index613 alt1"> 614 </div> <div class="line number615 index614 alt2"> 615 </div> <div class="line number616 index615 alt1"> 616 </div> <div class="line number617 index616 alt2"> 617 </div> <div class="line number618 index617 alt1"> 618 </div> <div class="line number619 index618 alt2"> 619 </div> <div class="line number620 index619 alt1"> 620 </div> <div class="line number621 index620 alt2"> 621 </div> <div class="line number622 index621 alt1"> 622 </div> <div class="line number623 index622 alt2"> 623 </div> <div class="line number624 index623 alt1"> 624 </div> <div class="line number625 index624 alt2"> 625 </div> <div class="line number626 index625 alt1"> 626 </div> <div class="line number627 index626 alt2"> 627 </div> <div class="line number628 index627 alt1"> 628 </div> <div class="line number629 index628 alt2"> 629 </div> <div class="line number630 index629 alt1"> 630 </div> <div class="line number631 index630 alt2"> 631 </div> <div class="line number632 index631 alt1"> 632 </div> <div class="line number633 index632 alt2"> 633 </div> <div class="line number634 index633 alt1"> 634 </div> <div class="line number635 index634 alt2"> 635 </div> <div class="line number636 index635 alt1"> 636 </div> <div class="line number637 index636 alt2"> 637 </div> <div class="line number638 index637 alt1"> 638 </div> <div class="line number639 index638 alt2"> 639 </div> <div class="line number640 index639 alt1"> 640 </div> <div class="line number641 index640 alt2"> 641 </div> <div class="line number642 index641 alt1"> 642 </div> <div class="line number643 index642 alt2"> 643 </div> <div class="line number644 index643 alt1"> 644 </div> <div class="line number645 index644 alt2"> 645 </div> <div class="line number646 index645 alt1"> 646 </div> <div class="line number647 index646 alt2"> 647 </div> <div class="line number648 index647 alt1"> 648 </div> <div class="line number649 index648 alt2"> 649 </div> <div class="line number650 index649 alt1"> 650 </div> <div class="line number651 index650 alt2"> 651 </div> <div class="line number652 index651 alt1"> 652 </div> <div class="line number653 index652 alt2"> 653 </div> <div class="line number654 index653 alt1"> 654 </div> <div class="line number655 index654 alt2"> 655 </div> <div class="line number656 index655 alt1"> 656 </div> <div class="line number657 index656 alt2"> 657 </div> <div class="line number658 index657 alt1"> 658 </div> <div class="line number659 index658 alt2"> 659 </div> <div class="line number660 index659 alt1"> 660 </div> <div class="line number661 index660 alt2"> 661 </div> <div class="line number662 index661 alt1"> 662 </div> <div class="line number663 index662 alt2"> 663 </div> <div class="line number664 index663 alt1"> 664 </div> <div class="line number665 index664 alt2"> 665 </div> <div class="line number666 index665 alt1"> 666 </div> <div class="line number667 index666 alt2"> 667 </div> <div class="line number668 index667 alt1"> 668 </div> <div class="line number669 index668 alt2"> 669 </div> <div class="line number670 index669 alt1"> 670 </div> <div class="line number671 index670 alt2"> 671 </div> <div class="line number672 index671 alt1"> 672 </div> <div class="line number673 index672 alt2"> 673 </div> <div class="line number674 index673 alt1"> 674 </div> <div class="line number675 index674 alt2"> 675 </div> <div class="line number676 index675 alt1"> 676 </div> <div class="line number677 index676 alt2"> 677 </div> <div class="line number678 index677 alt1"> 678 </div> <div class="line number679 index678 alt2"> 679 </div> <div class="line number680 index679 alt1"> 680 </div> <div class="line number681 index680 alt2"> 681 </div> <div class="line number682 index681 alt1"> 682 </div> <div class="line number683 index682 alt2"> 683 </div> <div class="line number684 index683 alt1"> 684 </div> <div class="line number685 index684 alt2"> 685 </div> <div class="line number686 index685 alt1"> 686 </div> <div class="line number687 index686 alt2"> 687 </div> <div class="line number688 index687 alt1"> 688 </div> <div class="line number689 index688 alt2"> 689 </div> <div class="line number690 index689 alt1"> 690 </div> <div class="line number691 index690 alt2"> 691 </div> <div class="line number692 index691 alt1"> 692 </div> <div class="line number693 index692 alt2"> 693 </div> <div class="line number694 index693 alt1"> 694 </div> <div class="line number695 index694 alt2"> 695 </div> <div class="line number696 index695 alt1"> 696 </div> <div class="line number697 index696 alt2"> 697 </div> <div class="line number698 index697 alt1"> 698 </div> <div class="line number699 index698 alt2"> 699 </div> <div class="line number700 index699 alt1"> 700 </div> <div class="line number701 index700 alt2"> 701 </div> <div class="line number702 index701 alt1"> 702 </div> <div class="line number703 index702 alt2"> 703 </div> <div class="line number704 index703 alt1"> 704 </div> <div class="line number705 index704 alt2"> 705 </div> <div class="line number706 index705 alt1"> 706 </div> <div class="line number707 index706 alt2"> 707 </div> <div class="line number708 index707 alt1"> 708 </div> <div class="line number709 index708 alt2"> 709 </div> <div class="line number710 index709 alt1"> 710 </div> <div class="line number711 index710 alt2"> 711 </div> <div class="line number712 index711 alt1"> 712 </div> <div class="line number713 index712 alt2"> 713 </div> <div class="line number714 index713 alt1"> 714 </div> <div class="line number715 index714 alt2"> 715 </div> <div class="line number716 index715 alt1"> 716 </div> <div class="line number717 index716 alt2"> 717 </div> <div class="line number718 index717 alt1"> 718 </div> <div class="line number719 index718 alt2"> 719 </div> <div class="line number720 index719 alt1"> 720 </div> <div class="line number721 index720 alt2"> 721 </div> <div class="line number722 index721 alt1"> 722 </div> <div class="line number723 index722 alt2"> 723 </div> <div class="line number724 index723 alt1"> 724 </div> <div class="line number725 index724 alt2"> 725 </div> <div class="line number726 index725 alt1"> 726 </div> <div class="line number727 index726 alt2"> 727 </div> <div class="line number728 index727 alt1"> 728 </div> <div class="line number729 index728 alt2"> 729 </div> <div class="line number730 index729 alt1"> 730 </div> <div class="line number731 index730 alt2"> 731 </div> <div class="line number732 index731 alt1"> 732 </div> <div class="line number733 index732 alt2"> 733 </div> <div class="line number734 index733 alt1"> 734 </div> <div class="line number735 index734 alt2"> 735 </div> <div class="line number736 index735 alt1"> 736 </div> <div class="line number737 index736 alt2"> 737 </div> <div class="line number738 index737 alt1"> 738 </div> <div class="line number739 index738 alt2"> 739 </div> <div class="line number740 index739 alt1"> 740 </div> <div class="line number741 index740 alt2"> 741 </div> <div class="line number742 index741 alt1"> 742 </div> <div class="line number743 index742 alt2"> 743 </div> <div class="line number744 index743 alt1"> 744 </div> <div class="line number745 index744 alt2"> 745 </div> <div class="line number746 index745 alt1"> 746 </div> <div class="line number747 index746 alt2"> 747 </div> <div class="line number748 index747 alt1"> 748 </div> <div class="line number749 index748 alt2"> 749 </div> <div class="line number750 index749 alt1"> 750 </div> <div class="line number751 index750 alt2"> 751 </div> <div class="line number752 index751 alt1"> 752 </div> <div class="line number753 index752 alt2"> 753 </div> <div class="line number754 index753 alt1"> 754 </div> <div class="line number755 index754 alt2"> 755 </div> <div class="line number756 index755 alt1"> 756 </div> <div class="line number757 index756 alt2"> 757 </div> <div class="line number758 index757 alt1"> 758 </div> <div class="line number759 index758 alt2"> 759 </div> <div class="line number760 index759 alt1"> 760 </div> <div class="line number761 index760 alt2"> 761 </div> <div class="line number762 index761 alt1"> 762 </div> <div class="line number763 index762 alt2"> 763 </div> <div class="line number764 index763 alt1"> 764 </div> <div class="line number765 index764 alt2"> 765 </div> <div class="line number766 index765 alt1"> 766 </div> <div class="line number767 index766 alt2"> 767 </div> <div class="line number768 index767 alt1"> 768 </div> <div class="line number769 index768 alt2"> 769 </div> <div class="line number770 index769 alt1"> 770 </div> <div class="line number771 index770 alt2"> 771 </div> <div class="line number772 index771 alt1"> 772 </div> <div class="line number773 index772 alt2"> 773 </div> <div class="line number774 index773 alt1"> 774 </div> <div class="line number775 index774 alt2"> 775 </div> <div class="line number776 index775 alt1"> 776 </div> <div class="line number777 index776 alt2"> 777 </div> <div class="line number778 index777 alt1"> 778 </div> <div class="line number779 index778 alt2"> 779 </div> <div class="line number780 index779 alt1"> 780 </div> <div class="line number781 index780 alt2"> 781 </div> <div class="line number782 index781 alt1"> 782 </div> <div class="line number783 index782 alt2"> 783 </div> <div class="line number784 index783 alt1"> 784 </div> <div class="line number785 index784 alt2"> 785 </div> <div class="line number786 index785 alt1"> 786 </div> <div class="line number787 index786 alt2"> 787 </div> <div class="line number788 index787 alt1"> 788 </div> <div class="line number789 index788 alt2"> 789 </div> <div class="line number790 index789 alt1"> 790 </div> <div class="line number791 index790 alt2"> 791 </div> <div class="line number792 index791 alt1"> 792 </div> <div class="line number793 index792 alt2"> 793 </div> <div class="line number794 index793 alt1"> 794 </div> <div class="line number795 index794 alt2"> 795 </div> <div class="line number796 index795 alt1"> 796 </div> <div class="line number797 index796 alt2"> 797 </div> <div class="line number798 index797 alt1"> 798 </div> <div class="line number799 index798 alt2"> 799 </div> <div class="line number800 index799 alt1"> 800 </div> <div class="line number801 index800 alt2"> 801 </div> <div class="line number802 index801 alt1"> 802 </div> <div class="line number803 index802 alt2"> 803 </div> <div class="line number804 index803 alt1"> 804 </div> <div class="line number805 index804 alt2"> 805 </div> <div class="line number806 index805 alt1"> 806 </div> <div class="line number807 index806 alt2"> 807 </div> <div class="line number808 index807 alt1"> 808 </div> <div class="line number809 index808 alt2"> 809 </div> <div class="line number810 index809 alt1"> 810 </div> <div class="line number811 index810 alt2"> 811 </div> <div class="line number812 index811 alt1"> 812 </div> <div class="line number813 index812 alt2"> 813 </div> <div class="line number814 index813 alt1"> 814 </div> <div class="line number815 index814 alt2"> 815 </div> <div class="line number816 index815 alt1"> 816 </div> <div class="line number817 index816 alt2"> 817 </div> <div class="line number818 index817 alt1"> 818 </div> <div class="line number819 index818 alt2"> 819 </div> <div class="line number820 index819 alt1"> 820 </div> <div class="line number821 index820 alt2"> 821 </div> <div class="line number822 index821 alt1"> 822 </div> <div class="line number823 index822 alt2"> 823 </div> <div class="line number824 index823 alt1"> 824 </div> <div class="line number825 index824 alt2"> 825 </div> <div class="line number826 index825 alt1"> 826 </div> <div class="line number827 index826 alt2"> 827 </div> <div class="line number828 index827 alt1"> 828 </div> <div class="line number829 index828 alt2"> 829 </div> <div class="line number830 index829 alt1"> 830 </div> <div class="line number831 index830 alt2"> 831 </div> <div class="line number832 index831 alt1"> 832 </div> <div class="line number833 index832 alt2"> 833 </div> <div class="line number834 index833 alt1"> 834 </div> <div class="line number835 index834 alt2"> 835 </div> <div class="line number836 index835 alt1"> 836 </div> <div class="line number837 index836 alt2"> 837 </div> <div class="line number838 index837 alt1"> 838 </div> <div class="line number839 index838 alt2"> 839 </div> <div class="line number840 index839 alt1"> 840 </div> <div class="line number841 index840 alt2"> 841 </div> <div class="line number842 index841 alt1"> 842 </div> <div class="line number843 index842 alt2"> 843 </div> <div class="line number844 index843 alt1"> 844 </div> <div class="line number845 index844 alt2"> 845 </div> <div class="line number846 index845 alt1"> 846 </div> <div class="line number847 index846 alt2"> 847 </div> <div class="line number848 index847 alt1"> 848 </div> <div class="line number849 index848 alt2"> 849 </div> <div class="line number850 index849 alt1"> 850 </div> <div class="line number851 index850 alt2"> 851 </div> <div class="line number852 index851 alt1"> 852 </div> <div class="line number853 index852 alt2"> 853 </div> <div class="line number854 index853 alt1"> 854 </div> <div class="line number855 index854 alt2"> 855 </div> <div class="line number856 index855 alt1"> 856 </div> <div class="line number857 index856 alt2"> 857 </div> <div class="line number858 index857 alt1"> 858 </div> <div class="line number859 index858 alt2"> 859 </div> <div class="line number860 index859 alt1"> 860 </div> <div class="line number861 index860 alt2"> 861 </div> <div class="line number862 index861 alt1"> 862 </div> <div class="line number863 index862 alt2"> 863 </div> <div class="line number864 index863 alt1"> 864 </div> <div class="line number865 index864 alt2"> 865 </div> <div class="line number866 index865 alt1"> 866 </div> <div class="line number867 index866 alt2"> 867 </div> <div class="line number868 index867 alt1"> 868 </div> <div class="line number869 index868 alt2"> 869 </div> <div class="line number870 index869 alt1"> 870 </div> <div class="line number871 index870 alt2"> 871 </div> <div class="line number872 index871 alt1"> 872 </div> <div class="line number873 index872 alt2"> 873 </div> <div class="line number874 index873 alt1"> 874 </div> <div class="line number875 index874 alt2"> 875 </div> <div class="line number876 index875 alt1"> 876 </div> <div class="line number877 index876 alt2"> 877 </div> <div class="line number878 index877 alt1"> 878 </div> <div class="line number879 index878 alt2"> 879 </div> <div class="line number880 index879 alt1"> 880 </div> <div class="line number881 index880 alt2"> 881 </div> <div class="line number882 index881 alt1"> 882 </div> <div class="line number883 index882 alt2"> 883 </div> <div class="line number884 index883 alt1"> 884 </div> <div class="line number885 index884 alt2"> 885 </div> <div class="line number886 index885 alt1"> 886 </div> <div class="line number887 index886 alt2"> 887 </div> <div class="line number888 index887 alt1"> 888 </div> <div class="line number889 index888 alt2"> 889 </div> <div class="line number890 index889 alt1"> 890 </div> <div class="line number891 index890 alt2"> 891 </div> <div class="line number892 index891 alt1"> 892 </div> <div class="line number893 index892 alt2"> 893 </div> <div class="line number894 index893 alt1"> 894 </div> <div class="line number895 index894 alt2"> 895 </div> <div class="line number896 index895 alt1"> 896 </div> <div class="line number897 index896 alt2"> 897 </div> <div class="line number898 index897 alt1"> 898 </div> <div class="line number899 index898 alt2"> 899 </div> <div class="line number900 index899 alt1"> 900 </div> <div class="line number901 index900 alt2"> 901 </div> <div class="line number902 index901 alt1"> 902 </div> <div class="line number903 index902 alt2"> 903 </div> <div class="line number904 index903 alt1"> 904 </div> <div class="line number905 index904 alt2"> 905 </div> <div class="line number906 index905 alt1"> 906 </div> <div class="line number907 index906 alt2"> 907 </div> <div class="line number908 index907 alt1"> 908 </div> <div class="line number909 index908 alt2"> 909 </div> <div class="line number910 index909 alt1"> 910 </div> <div class="line number911 index910 alt2"> 911 </div> <div class="line number912 index911 alt1"> 912 </div> <div class="line number913 index912 alt2"> 913 </div> <div class="line number914 index913 alt1"> 914 </div> <div class="line number915 index914 alt2"> 915 </div> <div class="line number916 index915 alt1"> 916 </div> <div class="line number917 index916 alt2"> 917 </div> <div class="line number918 index917 alt1"> 918 </div> <div class="line number919 index918 alt2"> 919 </div> <div class="line number920 index919 alt1"> 920 </div> <div class="line number921 index920 alt2"> 921 </div> <div class="line number922 index921 alt1"> 922 </div> <div class="line number923 index922 alt2"> 923 </div> <div class="line number924 index923 alt1"> 924 </div> <div class="line number925 index924 alt2"> 925 </div> <div class="line number926 index925 alt1"> 926 </div> <div class="line number927 index926 alt2"> 927 </div> <div class="line number928 index927 alt1"> 928 </div> <div class="line number929 index928 alt2"> 929 </div> <div class="line number930 index929 alt1"> 930 </div> <div class="line number931 index930 alt2"> 931 </div> <div class="line number932 index931 alt1"> 932 </div> <div class="line number933 index932 alt2"> 933 </div> <div class="line number934 index933 alt1"> 934 </div> <div class="line number935 index934 alt2"> 935 </div> <div class="line number936 index935 alt1"> 936 </div> <div class="line number937 index936 alt2"> 937 </div> <div class="line number938 index937 alt1"> 938 </div> <div class="line number939 index938 alt2"> 939 </div> <div class="line number940 index939 alt1"> 940 </div> <div class="line number941 index940 alt2"> 941 </div> <div class="line number942 index941 alt1"> 942 </div> <div class="line number943 index942 alt2"> 943 </div> <div class="line number944 index943 alt1"> 944 </div> <div class="line number945 index944 alt2"> 945 </div> <div class="line number946 index945 alt1"> 946 </div> <div class="line number947 index946 alt2"> 947 </div> <div class="line number948 index947 alt1"> 948 </div> <div class="line number949 index948 alt2"> 949 </div> <div class="line number950 index949 alt1"> 950 </div> <div class="line number951 index950 alt2"> 951 </div> <div class="line number952 index951 alt1"> 952 </div> <div class="line number953 index952 alt2"> 953 </div> <div class="line number954 index953 alt1"> 954 </div> <div class="line number955 index954 alt2"> 955 </div> <div class="line number956 index955 alt1"> 956 </div> <div class="line number957 index956 alt2"> 957 </div> <div class="line number958 index957 alt1"> 958 </div> <div class="line number959 index958 alt2"> 959 </div> <div class="line number960 index959 alt1"> 960 </div> <div class="line number961 index960 alt2"> 961 </div> <div class="line number962 index961 alt1"> 962 </div> <div class="line number963 index962 alt2"> 963 </div> <div class="line number964 index963 alt1"> 964 </div> <div class="line number965 index964 alt2"> 965 </div> <div class="line number966 index965 alt1"> 966 </div> <div class="line number967 index966 alt2"> 967 </div> <div class="line number968 index967 alt1"> 968 </div> <div class="line number969 index968 alt2"> 969 </div> <div class="line number970 index969 alt1"> 970 </div> <div class="line number971 index970 alt2"> 971 </div> <div class="line number972 index971 alt1"> 972 </div> <div class="line number973 index972 alt2"> 973 </div> <div class="line number974 index973 alt1"> 974 </div> <div class="line number975 index974 alt2"> 975 </div> <div class="line number976 index975 alt1"> 976 </div> <div class="line number977 index976 alt2"> 977 </div> <div class="line number978 index977 alt1"> 978 </div> <div class="line number979 index978 alt2"> 979 </div> <div class="line number980 index979 alt1"> 980 </div> <div class="line number981 index980 alt2"> 981 </div> <div class="line number982 index981 alt1"> 982 </div> <div class="line number983 index982 alt2"> 983 </div> <div class="line number984 index983 alt1"> 984 </div> <div class="line number985 index984 alt2"> 985 </div> <div class="line number986 index985 alt1"> 986 </div> <div class="line number987 index986 alt2"> 987 </div> <div class="line number988 index987 alt1"> 988 </div> <div class="line number989 index988 alt2"> 989 </div> <div class="line number990 index989 alt1"> 990 </div> <div class="line number991 index990 alt2"> 991 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `public` `class` `CustomViewAbove ``extends` `ViewGroup {` </div> <div class="line number2 index1 alt1"> </div> <div class="line number3 index2 alt2"> ` ``private` `static` `final` `String TAG = ``"CustomViewAbove"``;` </div> <div class="line number4 index3 alt1"> ` ``private` `static` `final` `boolean` `DEBUG = ``false``;` </div> <div class="line number5 index4 alt2"> </div> <div class="line number6 index5 alt1"> ` ``private` `static` `final` `boolean` `USE_CACHE = ``false``;` </div> <div class="line number7 index6 alt2"> </div> <div class="line number8 index7 alt1"> ` ``private` `static` `final` `int` `MAX_SETTLE_DURATION = ``600``; ``// ms` </div> <div class="line number9 index8 alt2"> ` ``private` `static` `final` `int` `MIN_DISTANCE_FOR_FLING = ``25``; ``// dips` </div> <div class="line number10 index9 alt1"> </div> <div class="line number11 index10 alt2"> ` ``private` `static` `final` `Interpolator sInterpolator = ``new` `Interpolator() {` </div> <div class="line number12 index11 alt1"> ` ``public` `float` `getInterpolation(``float` `t) {` </div> <div class="line number13 index12 alt2"> ` ``t -= ``1``.0f;` </div> <div class="line number14 index13 alt1"> ` ``return` `t * t * t * t * t + ``1``.0f;` </div> <div class="line number15 index14 alt2"> ` ``}` </div> <div class="line number16 index15 alt1"> ` ``};` </div> <div class="line number17 index16 alt2"> </div> <div class="line number18 index17 alt1"> ` ``private` `View mContent;` </div> <div class="line number19 index18 alt2"> </div> <div class="line number20 index19 alt1"> ` ``private` `int` `mCurItem;` </div> <div class="line number21 index20 alt2"> ` ``private` `Scroller mScroller;` </div> <div class="line number22 index21 alt1"> </div> <div class="line number23 index22 alt2"> ` ``private` `boolean` `mScrollingCacheEnabled;` </div> <div class="line number24 index23 alt1"> </div> <div class="line number25 index24 alt2"> ` ``private` `boolean` `mScrolling;` </div> <div class="line number26 index25 alt1"> </div> <div class="line number27 index26 alt2"> ` ``private` `boolean` `mIsBeingDragged;` </div> <div class="line number28 index27 alt1"> ` ``private` `boolean` `mIsUnableToDrag;` </div> <div class="line number29 index28 alt2"> ` ``private` `int` `mTouchSlop;` </div> <div class="line number30 index29 alt1"> ` ``private` `float` `mInitialMotionX;` </div> <div class="line number31 index30 alt2"> ` ``/**` </div> <div class="line number32 index31 alt1"> ` ``* Position of the last motion event.` </div> <div class="line number33 index32 alt2"> ` ``*/` </div> <div class="line number34 index33 alt1"> ` ``private` `float` `mLastMotionX;` </div> <div class="line number35 index34 alt2"> ` ``private` `float` `mLastMotionY;` </div> <div class="line number36 index35 alt1"> ` ``/**` </div> <div class="line number37 index36 alt2"> ` ``* ID of the active pointer. This is used to retain consistency during` </div> <div class="line number38 index37 alt1"> ` ``* drags/flings if multiple pointers are used.` </div> <div class="line number39 index38 alt2"> ` ``*/` </div> <div class="line number40 index39 alt1"> ` ``protected` `int` `mActivePointerId = INVALID_POINTER;` </div> <div class="line number41 index40 alt2"> ` ``/**` </div> <div class="line number42 index41 alt1"> ` ``* Sentinel value for no current active pointer.` </div> <div class="line number43 index42 alt2"> ` ``* Used by {@link #mActivePointerId}.` </div> <div class="line number44 index43 alt1"> ` ``*/` </div> <div class="line number45 index44 alt2"> ` ``private` `static` `final` `int` `INVALID_POINTER = -``1``;` </div> <div class="line number46 index45 alt1"> ` ``/** 保存转场动画的变量*/` </div> <div class="line number47 index46 alt2"> ` ``private` `CanvasTransformer mTransformer;` </div> <div class="line number48 index47 alt1"> </div> <div class="line number49 index48 alt2"> ` ``/**` </div> <div class="line number50 index49 alt1"> ` ``* Determines speed during touch scrolling` </div> <div class="line number51 index50 alt2"> ` ``*/` </div> <div class="line number52 index51 alt1"> ` ``protected` `VelocityTracker mVelocityTracker;` </div> <div class="line number53 index52 alt2"> ` ``private` `int` `mMinimumVelocity;` </div> <div class="line number54 index53 alt1"> ` ``protected` `int` `mMaximumVelocity;` </div> <div class="line number55 index54 alt2"> ` ``private` `int` `mFlingDistance;` </div> <div class="line number56 index55 alt1"> </div> <div class="line number57 index56 alt2"> ` ``private` `CustomViewBehind mViewBehind;` </div> <div class="line number58 index57 alt1"> ` ``// private int mMode;` </div> <div class="line number59 index58 alt2"> ` ``private` `boolean` `mEnabled = ``true``;` </div> <div class="line number60 index59 alt1"> </div> <div class="line number61 index60 alt2"> ` ``private` `OnPageChangeListener mOnPageChangeListener;` </div> <div class="line number62 index61 alt1"> ` ``private` `OnPageChangeListener mInternalPageChangeListener;` </div> <div class="line number63 index62 alt2"> </div> <div class="line number64 index63 alt1"> ` ``// private OnCloseListener mCloseListener;` </div> <div class="line number65 index64 alt2"> ` ``// private OnOpenListener mOpenListener;` </div> <div class="line number66 index65 alt1"> ` ``private` `OnClosedListener mClosedListener;` </div> <div class="line number67 index66 alt2"> ` ``private` `OnOpenedListener mOpenedListener;` </div> <div class="line number68 index67 alt1"> </div> <div class="line number69 index68 alt2"> ` ``private` `List&lt;View&gt; mIgnoredViews = ``new` `ArrayList&lt;View&gt;();` </div> <div class="line number70 index69 alt1"> </div> <div class="line number71 index70 alt2"> ` ``// private int mScrollState = SCROLL_STATE_IDLE;` </div> <div class="line number72 index71 alt1"> </div> <div class="line number73 index72 alt2"> ` ``/**` </div> <div class="line number74 index73 alt1"> ` ``* Callback interface for responding to changing state of the selected page.` </div> <div class="line number75 index74 alt2"> ` ``*/` </div> <div class="line number76 index75 alt1"> ` ``public` `interface` `OnPageChangeListener {` </div> <div class="line number77 index76 alt2"> </div> <div class="line number78 index77 alt1"> ` ``/**` </div> <div class="line number79 index78 alt2"> ` ``* This method will be invoked when the current page is scrolled, either as part` </div> <div class="line number80 index79 alt1"> ` ``* of a programmatically initiated smooth scroll or a user initiated touch scroll.` </div> <div class="line number81 index80 alt2"> ` ``*` </div> <div class="line number82 index81 alt1"> ` ``* @param position Position index of the first page currently being displayed.` </div> <div class="line number83 index82 alt2"> ` ``* Page position+1 will be visible if positionOffset is nonzero.` </div> <div class="line number84 index83 alt1"> ` ``* @param positionOffset Value from [0, 1) indicating the offset from the page at position.` </div> <div class="line number85 index84 alt2"> ` ``* @param positionOffsetPixels Value in pixels indicating the offset from position.` </div> <div class="line number86 index85 alt1"> ` ``*/` </div> <div class="line number87 index86 alt2"> ` ``public` `void` `onPageScrolled(``int` `position, ``float` `positionOffset, ``int` `positionOffsetPixels);` </div> <div class="line number88 index87 alt1"> </div> <div class="line number89 index88 alt2"> ` ``/**` </div> <div class="line number90 index89 alt1"> ` ``* This method will be invoked when a new page becomes selected. Animation is not` </div> <div class="line number91 index90 alt2"> ` ``* necessarily complete.` </div> <div class="line number92 index91 alt1"> ` ``*` </div> <div class="line number93 index92 alt2"> ` ``* @param position Position index of the new selected page.` </div> <div class="line number94 index93 alt1"> ` ``*/` </div> <div class="line number95 index94 alt2"> ` ``public` `void` `onPageSelected(``int` `position);` </div> <div class="line number96 index95 alt1"> </div> <div class="line number97 index96 alt2"> ` ``}` </div> <div class="line number98 index97 alt1"> </div> <div class="line number99 index98 alt2"> ` ``/**` </div> <div class="line number100 index99 alt1"> ` ``* Simple implementation of the {@link OnPageChangeListener} interface with stub` </div> <div class="line number101 index100 alt2"> ` ``* implementations of each method. Extend this if you do not intend to override` </div> <div class="line number102 index101 alt1"> ` ``* every method of {@link OnPageChangeListener}.` </div> <div class="line number103 index102 alt2"> ` ``*/` </div> <div class="line number104 index103 alt1"> ` ``public` `static` `class` `SimpleOnPageChangeListener ``implements` `OnPageChangeListener {` </div> <div class="line number105 index104 alt2"> </div> <div class="line number106 index105 alt1"> ` ``public` `void` `onPageScrolled(``int` `position, ``float` `positionOffset, ``int` `positionOffsetPixels) {` </div> <div class="line number107 index106 alt2"> ` ``// This space for rent` </div> <div class="line number108 index107 alt1"> ` ``}` </div> <div class="line number109 index108 alt2"> </div> <div class="line number110 index109 alt1"> ` ``public` `void` `onPageSelected(``int` `position) {` </div> <div class="line number111 index110 alt2"> ` ``// This space for rent` </div> <div class="line number112 index111 alt1"> ` ``}` </div> <div class="line number113 index112 alt2"> </div> <div class="line number114 index113 alt1"> ` ``public` `void` `onPageScrollStateChanged(``int` `state) {` </div> <div class="line number115 index114 alt2"> ` ``// This space for rent` </div> <div class="line number116 index115 alt1"> ` ``}` </div> <div class="line number117 index116 alt2"> </div> <div class="line number118 index117 alt1"> ` ``}` </div> <div class="line number119 index118 alt2"> </div> <div class="line number120 index119 alt1"> ` ``public` `CustomViewAbove(Context context) {` </div> <div class="line number121 index120 alt2"> ` ``this``(context, ``null``);` </div> <div class="line number122 index121 alt1"> ` ``}` </div> <div class="line number123 index122 alt2"> </div> <div class="line number124 index123 alt1"> ` ``public` `CustomViewAbove(Context context, AttributeSet attrs) {` </div> <div class="line number125 index124 alt2"> ` ``super``(context, attrs);` </div> <div class="line number126 index125 alt1"> ` ``initCustomViewAbove();` </div> <div class="line number127 index126 alt2"> ` ``}` </div> <div class="line number128 index127 alt1"> </div> <div class="line number129 index128 alt2"> ` ``void` `initCustomViewAbove() {` </div> <div class="line number130 index129 alt1"> ` ``setWillNotDraw(``false``);` </div> <div class="line number131 index130 alt2"> ` ``setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);` </div> <div class="line number132 index131 alt1"> ` ``setFocusable(``true``);` </div> <div class="line number133 index132 alt2"> ` ``final` `Context context = getContext();` </div> <div class="line number134 index133 alt1"> ` ``mScroller = ``new` `Scroller(context, sInterpolator);` </div> <div class="line number135 index134 alt2"> ` ``final` `ViewConfiguration configuration = ViewConfiguration.get(context);` </div> <div class="line number136 index135 alt1"> ` ``mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(configuration);` </div> <div class="line number137 index136 alt2"> ` ``mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();` </div> <div class="line number138 index137 alt1"> ` ``mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();` </div> <div class="line number139 index138 alt2"> ` ``setInternalPageChangeListener(``new` `SimpleOnPageChangeListener() {` </div> <div class="line number140 index139 alt1"> ` ``public` `void` `onPageSelected(``int` `position) {` </div> <div class="line number141 index140 alt2"> ` ``if` `(mViewBehind != ``null``) {` </div> <div class="line number142 index141 alt1"> ` ``switch` `(position) {` </div> <div class="line number143 index142 alt2"> ` ``case` ```:` </div> <div class="line number144 index143 alt1"> ` ``case` `2``:` </div> <div class="line number145 index144 alt2"> ` ``mViewBehind.setChildrenEnabled(``true``);` </div> <div class="line number146 index145 alt1"> ` ``break``;` </div> <div class="line number147 index146 alt2"> ` ``case` `1``:` </div> <div class="line number148 index147 alt1"> ` ``mViewBehind.setChildrenEnabled(``false``);` </div> <div class="line number149 index148 alt2"> ` ``break``;` </div> <div class="line number150 index149 alt1"> ` ``}` </div> <div class="line number151 index150 alt2"> ` ``}` </div> <div class="line number152 index151 alt1"> ` ``}` </div> <div class="line number153 index152 alt2"> ` ``});` </div> <div class="line number154 index153 alt1"> </div> <div class="line number155 index154 alt2"> ` ``final` `float` `density = context.getResources().getDisplayMetrics().density;` </div> <div class="line number156 index155 alt1"> ` ``mFlingDistance = (``int``) (MIN_DISTANCE_FOR_FLING * density);` </div> <div class="line number157 index156 alt2"> ` ``}` </div> <div class="line number158 index157 alt1"> </div> <div class="line number159 index158 alt2"> ` ``/**` </div> <div class="line number160 index159 alt1"> ` ``* Set the currently selected page. If the CustomViewPager has already been through its first` </div> <div class="line number161 index160 alt2"> ` ``* layout there will be a smooth animated transition between the current item and the` </div> <div class="line number162 index161 alt1"> ` ``* specified item.` </div> <div class="line number163 index162 alt2"> ` ``*` </div> <div class="line number164 index163 alt1"> ` ``* @param item Item index to select` </div> <div class="line number165 index164 alt2"> ` ``*/` </div> <div class="line number166 index165 alt1"> ` ``public` `void` `setCurrentItem(``int` `item) {` </div> <div class="line number167 index166 alt2"> ` ``setCurrentItemInternal(item, ``true``, ``false``);` </div> <div class="line number168 index167 alt1"> ` ``}` </div> <div class="line number169 index168 alt2"> </div> <div class="line number170 index169 alt1"> ` ``/**` </div> <div class="line number171 index170 alt2"> ` ``* Set the currently selected page.` </div> <div class="line number172 index171 alt1"> ` ``*` </div> <div class="line number173 index172 alt2"> ` ``* @param item Item index to select` </div> <div class="line number174 index173 alt1"> ` ``* @param smoothScroll True to smoothly scroll to the new item, false to transition immediately` </div> <div class="line number175 index174 alt2"> ` ``*/` </div> <div class="line number176 index175 alt1"> ` ``public` `void` `setCurrentItem(``int` `item, ``boolean` `smoothScroll) {` </div> <div class="line number177 index176 alt2"> ` ``setCurrentItemInternal(item, smoothScroll, ``false``);` </div> <div class="line number178 index177 alt1"> ` ``}` </div> <div class="line number179 index178 alt2"> </div> <div class="line number180 index179 alt1"> ` ``public` `int` `getCurrentItem() {` </div> <div class="line number181 index180 alt2"> ` ``return` `mCurItem;` </div> <div class="line number182 index181 alt1"> ` ``}` </div> <div class="line number183 index182 alt2"> </div> <div class="line number184 index183 alt1"> ` ``void` `setCurrentItemInternal(``int` `item, ``boolean` `smoothScroll, ``boolean` `always) {` </div> <div class="line number185 index184 alt2"> ` ``setCurrentItemInternal(item, smoothScroll, always, ````);` </div> <div class="line number186 index185 alt1"> ` ``}` </div> <div class="line number187 index186 alt2"> </div> <div class="line number188 index187 alt1"> ` ``void` `setCurrentItemInternal(``int` `item, ``boolean` `smoothScroll, ``boolean` `always, ``int` `velocity) {` </div> <div class="line number189 index188 alt2"> ` ``if` `(!always && mCurItem == item) {` </div> <div class="line number190 index189 alt1"> ` ``setScrollingCacheEnabled(``false``);` </div> <div class="line number191 index190 alt2"> ` ``return``;` </div> <div class="line number192 index191 alt1"> ` ``}` </div> <div class="line number193 index192 alt2"> </div> <div class="line number194 index193 alt1"> ` ``item = mViewBehind.getMenuPage(item);` </div> <div class="line number195 index194 alt2"> </div> <div class="line number196 index195 alt1"> ` ``final` `boolean` `dispatchSelected = mCurItem != item;` </div> <div class="line number197 index196 alt2"> ` ``mCurItem = item;` </div> <div class="line number198 index197 alt1"> ` ``final` `int` `destX = getDestScrollX(mCurItem);` </div> <div class="line number199 index198 alt2"> ` ``if` `(dispatchSelected && mOnPageChangeListener != ``null``) {` </div> <div class="line number200 index199 alt1"> ` ``mOnPageChangeListener.onPageSelected(item);` </div> <div class="line number201 index200 alt2"> ` ``}` </div> <div class="line number202 index201 alt1"> ` ``if` `(dispatchSelected && mInternalPageChangeListener != ``null``) {` </div> <div class="line number203 index202 alt2"> ` ``mInternalPageChangeListener.onPageSelected(item);` </div> <div class="line number204 index203 alt1"> ` ``}` </div> <div class="line number205 index204 alt2"> ` ``if` `(smoothScroll) {` </div> <div class="line number206 index205 alt1"> ` ``smoothScrollTo(destX, ````, velocity);` </div> <div class="line number207 index206 alt2"> ` ``} ``else` `{` </div> <div class="line number208 index207 alt1"> ` ``completeScroll();` </div> <div class="line number209 index208 alt2"> ` ``scrollTo(destX, ````);` </div> <div class="line number210 index209 alt1"> ` ``}` </div> <div class="line number211 index210 alt2"> ` ``}` </div> <div class="line number212 index211 alt1"> </div> <div class="line number213 index212 alt2"> ` ``/**` </div> <div class="line number214 index213 alt1"> ` ``* Set a listener that will be invoked whenever the page changes or is incrementally` </div> <div class="line number215 index214 alt2"> ` ``* scrolled. See {@link OnPageChangeListener}.` </div> <div class="line number216 index215 alt1"> ` ``*` </div> <div class="line number217 index216 alt2"> ` ``* @param listener Listener to set` </div> <div class="line number218 index217 alt1"> ` ``*/` </div> <div class="line number219 index218 alt2"> ` ``public` `void` `setOnPageChangeListener(OnPageChangeListener listener) {` </div> <div class="line number220 index219 alt1"> ` ``mOnPageChangeListener = listener;` </div> <div class="line number221 index220 alt2"> ` ``}` </div> <div class="line number222 index221 alt1"> ` ``/*` </div> <div class="line number223 index222 alt2"> ` ``public void setOnOpenListener(OnOpenListener l) {` </div> <div class="line number224 index223 alt1"> ` ``mOpenListener = l;` </div> <div class="line number225 index224 alt2"> ` ``}` </div> <div class="line number226 index225 alt1"> </div> <div class="line number227 index226 alt2"> ` ``public void setOnCloseListener(OnCloseListener l) {` </div> <div class="line number228 index227 alt1"> ` ``mCloseListener = l;` </div> <div class="line number229 index228 alt2"> ` ``}` </div> <div class="line number230 index229 alt1"> ` ``*/` </div> <div class="line number231 index230 alt2"> ` ``public void setOnOpenedListener(OnOpenedListener l) {` </div> <div class="line number232 index231 alt1"> ` ``mOpenedListener = l;` </div> <div class="line number233 index232 alt2"> ` ``}` </div> <div class="line number234 index233 alt1"> </div> <div class="line number235 index234 alt2"> ` ``public void setOnClosedListener(OnClosedListener l) {` </div> <div class="line number236 index235 alt1"> ` ``mClosedListener = l;` </div> <div class="line number237 index236 alt2"> ` ``}` </div> <div class="line number238 index237 alt1"> </div> <div class="line number239 index238 alt2"> ` ``/**` </div> <div class="line number240 index239 alt1"> ` ``* Set a separate OnPageChangeListener for internal use by the support library.` </div> <div class="line number241 index240 alt2"> ` ``*` </div> <div class="line number242 index241 alt1"> ` ``* @param listener Listener to set` </div> <div class="line number243 index242 alt2"> ` ``* @return The old listener that was set, if any.` </div> <div class="line number244 index243 alt1"> ` ``*/` </div> <div class="line number245 index244 alt2"> ` ``OnPageChangeListener setInternalPageChangeListener(OnPageChangeListener listener) {` </div> <div class="line number246 index245 alt1"> ` ``OnPageChangeListener oldListener = mInternalPageChangeListener;` </div> <div class="line number247 index246 alt2"> ` ``mInternalPageChangeListener = listener;` </div> <div class="line number248 index247 alt1"> ` ``return oldListener;` </div> <div class="line number249 index248 alt2"> ` ``}` </div> <div class="line number250 index249 alt1"> </div> <div class="line number251 index250 alt2"> ` ``public void addIgnoredView(View v) {` </div> <div class="line number252 index251 alt1"> ` ``if (!mIgnoredViews.contains(v)) {` </div> <div class="line number253 index252 alt2"> ` ``mIgnoredViews.add(v);` </div> <div class="line number254 index253 alt1"> ` ``}` </div> <div class="line number255 index254 alt2"> ` ``}` </div> <div class="line number256 index255 alt1"> </div> <div class="line number257 index256 alt2"> ` ``public void removeIgnoredView(View v) {` </div> <div class="line number258 index257 alt1"> ` ``mIgnoredViews.remove(v);` </div> <div class="line number259 index258 alt2"> ` ``}` </div> <div class="line number260 index259 alt1"> </div> <div class="line number261 index260 alt2"> ` ``public void clearIgnoredViews() {` </div> <div class="line number262 index261 alt1"> ` ``mIgnoredViews.clear();` </div> <div class="line number263 index262 alt2"> ` ``}` </div> <div class="line number264 index263 alt1"> </div> <div class="line number265 index264 alt2"> ` ``// We want the duration of the page snap animation to be influenced by the distance that` </div> <div class="line number266 index265 alt1"> ` ``// the screen has to travel, however, we don't want this duration to be effected in a` </div> <div class="line number267 index266 alt2"> ` ``// purely linear fashion. Instead, we use this method to moderate the effect that the distance` </div> <div class="line number268 index267 alt1"> ` ``// of travel has on the overall snap duration.` </div> <div class="line number269 index268 alt2"> ` ``float distanceInfluenceForSnapDuration(float f) {` </div> <div class="line number270 index269 alt1"> ` ``f -= 0.5f; // center the values about 0.` </div> <div class="line number271 index270 alt2"> ` ``f *= 0.3f * Math.PI / 2.0f;` </div> <div class="line number272 index271 alt1"> ` ``return (float) FloatMath.sin(f);` </div> <div class="line number273 index272 alt2"> ` ``}` </div> <div class="line number274 index273 alt1"> </div> <div class="line number275 index274 alt2"> ` ``public int getDestScrollX(int page) {` </div> <div class="line number276 index275 alt1"> ` ``switch (page) {` </div> <div class="line number277 index276 alt2"> ` ``case 0:` </div> <div class="line number278 index277 alt1"> ` ``case 2:` </div> <div class="line number279 index278 alt2"> ` ``return mViewBehind.getMenuLeft(mContent, page);` </div> <div class="line number280 index279 alt1"> ` ``case 1:` </div> <div class="line number281 index280 alt2"> ` ``return mContent.getLeft();` </div> <div class="line number282 index281 alt1"> ` ``}` </div> <div class="line number283 index282 alt2"> ` ``return 0;` </div> <div class="line number284 index283 alt1"> ` ``}` </div> <div class="line number285 index284 alt2"> </div> <div class="line number286 index285 alt1"> ` ``private int getLeftBound() {` </div> <div class="line number287 index286 alt2"> ` ``return mViewBehind.getAbsLeftBound(mContent);` </div> <div class="line number288 index287 alt1"> ` ``}` </div> <div class="line number289 index288 alt2"> </div> <div class="line number290 index289 alt1"> ` ``private int getRightBound() {` </div> <div class="line number291 index290 alt2"> ` ``return mViewBehind.getAbsRightBound(mContent);` </div> <div class="line number292 index291 alt1"> ` ``}` </div> <div class="line number293 index292 alt2"> </div> <div class="line number294 index293 alt1"> ` ``public int getContentLeft() {` </div> <div class="line number295 index294 alt2"> ` ``return mContent.getLeft() + mContent.getPaddingLeft();` </div> <div class="line number296 index295 alt1"> ` ``}` </div> <div class="line number297 index296 alt2"> </div> <div class="line number298 index297 alt1"> ` ``public boolean isMenuOpen() {` </div> <div class="line number299 index298 alt2"> ` ``return mCurItem == 0 || mCurItem == 2;` </div> <div class="line number300 index299 alt1"> ` ``}` </div> <div class="line number301 index300 alt2"> </div> <div class="line number302 index301 alt1"> ` ``private boolean isInIgnoredView(MotionEvent ev) {` </div> <div class="line number303 index302 alt2"> ` ``Rect rect = new Rect();` </div> <div class="line number304 index303 alt1"> ` ``for (View v : mIgnoredViews) {` </div> <div class="line number305 index304 alt2"> ` ``v.getHitRect(rect);` </div> <div class="line number306 index305 alt1"> ` ``if (rect.contains((int)ev.getX(), (int)ev.getY())) return true;` </div> <div class="line number307 index306 alt2"> ` ``}` </div> <div class="line number308 index307 alt1"> ` ``return false;` </div> <div class="line number309 index308 alt2"> ` ``}` </div> <div class="line number310 index309 alt1"> </div> <div class="line number311 index310 alt2"> ` ``public int getBehindWidth() {` </div> <div class="line number312 index311 alt1"> ` ``if (mViewBehind == null) {` </div> <div class="line number313 index312 alt2"> ` ``return 0;` </div> <div class="line number314 index313 alt1"> ` ``} else {` </div> <div class="line number315 index314 alt2"> ` ``return mViewBehind.getBehindWidth();` </div> <div class="line number316 index315 alt1"> ` ``}` </div> <div class="line number317 index316 alt2"> ` ``}` </div> <div class="line number318 index317 alt1"> </div> <div class="line number319 index318 alt2"> ` ``public int getChildWidth(int i) {` </div> <div class="line number320 index319 alt1"> ` ``switch (i) {` </div> <div class="line number321 index320 alt2"> ` ``case 0:` </div> <div class="line number322 index321 alt1"> ` ``return getBehindWidth();` </div> <div class="line number323 index322 alt2"> ` ``case 1:` </div> <div class="line number324 index323 alt1"> ` ``return mContent.getWidth();` </div> <div class="line number325 index324 alt2"> ` ``default:` </div> <div class="line number326 index325 alt1"> ` ``return 0;` </div> <div class="line number327 index326 alt2"> ` ``}` </div> <div class="line number328 index327 alt1"> ` ``}` </div> <div class="line number329 index328 alt2"> </div> <div class="line number330 index329 alt1"> ` ``public boolean isSlidingEnabled() {` </div> <div class="line number331 index330 alt2"> ` ``return mEnabled;` </div> <div class="line number332 index331 alt1"> ` ``}` </div> <div class="line number333 index332 alt2"> </div> <div class="line number334 index333 alt1"> ` ``public void setSlidingEnabled(boolean b) {` </div> <div class="line number335 index334 alt2"> ` ``mEnabled = b;` </div> <div class="line number336 index335 alt1"> ` ``}` </div> <div class="line number337 index336 alt2"> </div> <div class="line number338 index337 alt1"> ` ``/**` </div> <div class="line number339 index338 alt2"> ` ``* Like {@link View#scrollBy}, but scroll smoothly instead of immediately.` </div> <div class="line number340 index339 alt1"> ` ``*` </div> <div class="line number341 index340 alt2"> ` ``* @param x the number of pixels to scroll by on the X axis` </div> <div class="line number342 index341 alt1"> ` ``* @param y the number of pixels to scroll by on the Y axis` </div> <div class="line number343 index342 alt2"> ` ``*/` </div> <div class="line number344 index343 alt1"> ` ``void smoothScrollTo(int x, int y) {` </div> <div class="line number345 index344 alt2"> ` ``smoothScrollTo(x, y, 0);` </div> <div class="line number346 index345 alt1"> ` ``}` </div> <div class="line number347 index346 alt2"> </div> <div class="line number348 index347 alt1"> ` ``/**` </div> <div class="line number349 index348 alt2"> ` ``* Like {@link View#scrollBy}, but scroll smoothly instead of immediately.` </div> <div class="line number350 index349 alt1"> ` ``*` </div> <div class="line number351 index350 alt2"> ` ``* @param x the number of pixels to scroll by on the X axis` </div> <div class="line number352 index351 alt1"> ` ``* @param y the number of pixels to scroll by on the Y axis` </div> <div class="line number353 index352 alt2"> ` ``* @param velocity the velocity associated with a fling, if applicable. (0 otherwise)` </div> <div class="line number354 index353 alt1"> ` ``*/` </div> <div class="line number355 index354 alt2"> ` ``void smoothScrollTo(int x, int y, int velocity) {` </div> <div class="line number356 index355 alt1"> ` ``if (getChildCount() == 0) {` </div> <div class="line number357 index356 alt2"> ` ``// Nothing to do.` </div> <div class="line number358 index357 alt1"> ` ``setScrollingCacheEnabled(false);` </div> <div class="line number359 index358 alt2"> ` ``return;` </div> <div class="line number360 index359 alt1"> ` ``}` </div> <div class="line number361 index360 alt2"> ` ``int sx = getScrollX();` </div> <div class="line number362 index361 alt1"> ` ``int sy = getScrollY();` </div> <div class="line number363 index362 alt2"> ` ``int dx = x - sx;` </div> <div class="line number364 index363 alt1"> ` ``int dy = y - sy;` </div> <div class="line number365 index364 alt2"> ` ``if (dx == 0 && dy == 0) {` </div> <div class="line number366 index365 alt1"> ` ``completeScroll();` </div> <div class="line number367 index366 alt2"> ` ``if (isMenuOpen()) {` </div> <div class="line number368 index367 alt1"> ` ``if (mOpenedListener != null)` </div> <div class="line number369 index368 alt2"> ` ``mOpenedListener.onOpened();` </div> <div class="line number370 index369 alt1"> ` ``} else {` </div> <div class="line number371 index370 alt2"> ` ``if (mClosedListener != null)` </div> <div class="line number372 index371 alt1"> ` ``mClosedListener.onClosed();` </div> <div class="line number373 index372 alt2"> ` ``}` </div> <div class="line number374 index373 alt1"> ` ``return;` </div> <div class="line number375 index374 alt2"> ` ``}` </div> <div class="line number376 index375 alt1"> </div> <div class="line number377 index376 alt2"> ` ``setScrollingCacheEnabled(true);` </div> <div class="line number378 index377 alt1"> ` ``mScrolling = true;` </div> <div class="line number379 index378 alt2"> </div> <div class="line number380 index379 alt1"> ` ``final int width = getBehindWidth();` </div> <div class="line number381 index380 alt2"> ` ``final int halfWidth = width / 2;` </div> <div class="line number382 index381 alt1"> ` ``final float distanceRatio = Math.min(1f, 1.0f * Math.abs(dx) / width);` </div> <div class="line number383 index382 alt2"> ` ``final float distance = halfWidth + halfWidth *` </div> <div class="line number384 index383 alt1"> ` ``distanceInfluenceForSnapDuration(distanceRatio);` </div> <div class="line number385 index384 alt2"> </div> <div class="line number386 index385 alt1"> ` ``int duration = 0;` </div> <div class="line number387 index386 alt2"> ` ``velocity = Math.abs(velocity);` </div> <div class="line number388 index387 alt1"> ` ``if (velocity &gt; 0) {` </div> <div class="line number389 index388 alt2"> ` ``duration = 4 * Math.round(1000 * Math.abs(distance / velocity));` </div> <div class="line number390 index389 alt1"> ` ``} else {` </div> <div class="line number391 index390 alt2"> ` ``final float pageDelta = (float) Math.abs(dx) / width;` </div> <div class="line number392 index391 alt1"> ` ``duration = (int) ((pageDelta + 1) * 100);` </div> <div class="line number393 index392 alt2"> ` ``duration = MAX_SETTLE_DURATION;` </div> <div class="line number394 index393 alt1"> ` ``}` </div> <div class="line number395 index394 alt2"> ` ``duration = Math.min(duration, MAX_SETTLE_DURATION);` </div> <div class="line number396 index395 alt1"> </div> <div class="line number397 index396 alt2"> ` ``mScroller.startScroll(sx, sy, dx, dy, duration);` </div> <div class="line number398 index397 alt1"> ` ``invalidate();` </div> <div class="line number399 index398 alt2"> ` ``}` </div> <div class="line number400 index399 alt1"> </div> <div class="line number401 index400 alt2"> ` ``public void setContent(View v) {` </div> <div class="line number402 index401 alt1"> ` ``if (mContent != null)` </div> <div class="line number403 index402 alt2"> ` ``this.removeView(mContent);` </div> <div class="line number404 index403 alt1"> ` ``mContent = v;` </div> <div class="line number405 index404 alt2"> ` ``addView(mContent);` </div> <div class="line number406 index405 alt1"> ` ``}` </div> <div class="line number407 index406 alt2"> </div> <div class="line number408 index407 alt1"> ` ``public View getContent() {` </div> <div class="line number409 index408 alt2"> ` ``return mContent;` </div> <div class="line number410 index409 alt1"> ` ``}` </div> <div class="line number411 index410 alt2"> </div> <div class="line number412 index411 alt1"> ` ``public void setCustomViewBehind(CustomViewBehind cvb) {` </div> <div class="line number413 index412 alt2"> ` ``mViewBehind = cvb;` </div> <div class="line number414 index413 alt1"> ` ``}` </div> <div class="line number415 index414 alt2"> </div> <div class="line number416 index415 alt1"> ` ``@Override` </div> <div class="line number417 index416 alt2"> ` ``protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {` </div> <div class="line number418 index417 alt1"> </div> <div class="line number419 index418 alt2"> ` ``int width = getDefaultSize(0, widthMeasureSpec);` </div> <div class="line number420 index419 alt1"> ` ``int height = getDefaultSize(0, heightMeasureSpec);` </div> <div class="line number421 index420 alt2"> ` ``setMeasuredDimension(width, height);` </div> <div class="line number422 index421 alt1"> </div> <div class="line number423 index422 alt2"> ` ``final int contentWidth = getChildMeasureSpec(widthMeasureSpec, 0, width);` </div> <div class="line number424 index423 alt1"> ` ``final int contentHeight = getChildMeasureSpec(heightMeasureSpec, 0, height);` </div> <div class="line number425 index424 alt2"> ` ``mContent.measure(contentWidth, contentHeight);` </div> <div class="line number426 index425 alt1"> ` ``}` </div> <div class="line number427 index426 alt2"> </div> <div class="line number428 index427 alt1"> ` ``@Override` </div> <div class="line number429 index428 alt2"> ` ``protected void onSizeChanged(int w, int h, int oldw, int oldh) {` </div> <div class="line number430 index429 alt1"> ` ``super.onSizeChanged(w, h, oldw, oldh);` </div> <div class="line number431 index430 alt2"> ` ``// Make sure scroll position is set correctly.` </div> <div class="line number432 index431 alt1"> ` ``if (w != oldw) {` </div> <div class="line number433 index432 alt2"> ` ``// [ChrisJ] - This fixes the onConfiguration change for orientation issue..` </div> <div class="line number434 index433 alt1"> ` ``// maybe worth having a look why the recomputeScroll pos is screwing` </div> <div class="line number435 index434 alt2"> ` ``// up?` </div> <div class="line number436 index435 alt1"> ` ``completeScroll();` </div> <div class="line number437 index436 alt2"> ` ``scrollTo(getDestScrollX(mCurItem), getScrollY());` </div> <div class="line number438 index437 alt1"> ` ``}` </div> <div class="line number439 index438 alt2"> ` ``}` </div> <div class="line number440 index439 alt1"> </div> <div class="line number441 index440 alt2"> ` ``@Override` </div> <div class="line number442 index441 alt1"> ` ``protected void onLayout(boolean changed, int l, int t, int r, int b) {` </div> <div class="line number443 index442 alt2"> ` ``final int width = r - l;` </div> <div class="line number444 index443 alt1"> ` ``final int height = b - t;` </div> <div class="line number445 index444 alt2"> ` ``mContent.layout(0, 0, width, height);` </div> <div class="line number446 index445 alt1"> ` ``}` </div> <div class="line number447 index446 alt2"> </div> <div class="line number448 index447 alt1"> ` ``public void setAboveOffset(int i) {` </div> <div class="line number449 index448 alt2"> ` ``// RelativeLayout.LayoutParams params = ((RelativeLayout.LayoutParams)mContent.getLayoutParams());` </div> <div class="line number450 index449 alt1"> ` ``// params.setMargins(i, params.topMargin, params.rightMargin, params.bottomMargin);` </div> <div class="line number451 index450 alt2"> ` ``mContent.setPadding(i, mContent.getPaddingTop(),` </div> <div class="line number452 index451 alt1"> ` ``mContent.getPaddingRight(), mContent.getPaddingBottom());` </div> <div class="line number453 index452 alt2"> ` ``}` </div> <div class="line number454 index453 alt1"> </div> <div class="line number455 index454 alt2"> ` ``@Override` </div> <div class="line number456 index455 alt1"> ` ``public void computeScroll() {` </div> <div class="line number457 index456 alt2"> ` ``if (!mScroller.isFinished()) {` </div> <div class="line number458 index457 alt1"> ` ``if (mScroller.computeScrollOffset()) {` </div> <div class="line number459 index458 alt2"> ` ``int oldX = getScrollX();` </div> <div class="line number460 index459 alt1"> ` ``int oldY = getScrollY();` </div> <div class="line number461 index460 alt2"> ` ``int x = mScroller.getCurrX();` </div> <div class="line number462 index461 alt1"> ` ``int y = mScroller.getCurrY();` </div> <div class="line number463 index462 alt2"> </div> <div class="line number464 index463 alt1"> ` ``if (oldX != x || oldY != y) {` </div> <div class="line number465 index464 alt2"> ` ``scrollTo(x, y);` </div> <div class="line number466 index465 alt1"> ` ``pageScrolled(x);` </div> <div class="line number467 index466 alt2"> ` ``}` </div> <div class="line number468 index467 alt1"> </div> <div class="line number469 index468 alt2"> ` ``// Keep on drawing until the animation has finished.` </div> <div class="line number470 index469 alt1"> ` ``invalidate();` </div> <div class="line number471 index470 alt2"> ` ``return;` </div> <div class="line number472 index471 alt1"> ` ``}` </div> <div class="line number473 index472 alt2"> ` ``}` </div> <div class="line number474 index473 alt1"> </div> <div class="line number475 index474 alt2"> ` ``// Done with scroll, clean up state.` </div> <div class="line number476 index475 alt1"> ` ``completeScroll();` </div> <div class="line number477 index476 alt2"> ` ``}` </div> <div class="line number478 index477 alt1"> </div> <div class="line number479 index478 alt2"> ` ``private void pageScrolled(int xpos) {` </div> <div class="line number480 index479 alt1"> ` ``final int widthWithMargin = getWidth();` </div> <div class="line number481 index480 alt2"> ` ``final int position = xpos / widthWithMargin;` </div> <div class="line number482 index481 alt1"> ` ``final int offsetPixels = xpos % widthWithMargin;` </div> <div class="line number483 index482 alt2"> ` ``final float offset = (float) offsetPixels / widthWithMargin;` </div> <div class="line number484 index483 alt1"> </div> <div class="line number485 index484 alt2"> ` ``onPageScrolled(position, offset, offsetPixels);` </div> <div class="line number486 index485 alt1"> ` ``}` </div> <div class="line number487 index486 alt2"> </div> <div class="line number488 index487 alt1"> ` ``/**` </div> <div class="line number489 index488 alt2"> ` ``* This method will be invoked when the current page is scrolled, either as part` </div> <div class="line number490 index489 alt1"> ` ``* of a programmatically initiated smooth scroll or a user initiated touch scroll.` </div> <div class="line number491 index490 alt2"> ` ``* If you override this method you must call through to the superclass implementation` </div> <div class="line number492 index491 alt1"> ` ``* (e.g. super.onPageScrolled(position, offset, offsetPixels)) before onPageScrolled` </div> <div class="line number493 index492 alt2"> ` ``* returns.` </div> <div class="line number494 index493 alt1"> ` ``*` </div> <div class="line number495 index494 alt2"> ` ``* @param position Position index of the first page currently being displayed.` </div> <div class="line number496 index495 alt1"> ` ``* Page position+1 will be visible if positionOffset is nonzero.` </div> <div class="line number497 index496 alt2"> ` ``* @param offset Value from [0, 1) indicating the offset from the page at position.` </div> <div class="line number498 index497 alt1"> ` ``* @param offsetPixels Value in pixels indicating the offset from position.` </div> <div class="line number499 index498 alt2"> ` ``*/` </div> <div class="line number500 index499 alt1"> ` ``protected void onPageScrolled(int position, float offset, int offsetPixels) {` </div> <div class="line number501 index500 alt2"> ` ``if (mOnPageChangeListener != null) {` </div> <div class="line number502 index501 alt1"> ` ``mOnPageChangeListener.onPageScrolled(position, offset, offsetPixels);` </div> <div class="line number503 index502 alt2"> ` ``}` </div> <div class="line number504 index503 alt1"> ` ``if (mInternalPageChangeListener != null) {` </div> <div class="line number505 index504 alt2"> ` ``mInternalPageChangeListener.onPageScrolled(position, offset, offsetPixels);` </div> <div class="line number506 index505 alt1"> ` ``}` </div> <div class="line number507 index506 alt2"> ` ``}` </div> <div class="line number508 index507 alt1"> </div> <div class="line number509 index508 alt2"> ` ``private void completeScroll() {` </div> <div class="line number510 index509 alt1"> ` ``boolean needPopulate = mScrolling;` </div> <div class="line number511 index510 alt2"> ` ``if (needPopulate) {` </div> <div class="line number512 index511 alt1"> ` ``// Done with scroll, no longer want to cache view drawing.` </div> <div class="line number513 index512 alt2"> ` ``setScrollingCacheEnabled(false);` </div> <div class="line number514 index513 alt1"> ` ``mScroller.abortAnimation();` </div> <div class="line number515 index514 alt2"> ` ``int oldX = getScrollX();` </div> <div class="line number516 index515 alt1"> ` ``int oldY = getScrollY();` </div> <div class="line number517 index516 alt2"> ` ``int x = mScroller.getCurrX();` </div> <div class="line number518 index517 alt1"> ` ``int y = mScroller.getCurrY();` </div> <div class="line number519 index518 alt2"> ` ``if (oldX != x || oldY != y) {` </div> <div class="line number520 index519 alt1"> ` ``scrollTo(x, y);` </div> <div class="line number521 index520 alt2"> ` ``}` </div> <div class="line number522 index521 alt1"> ` ``if (isMenuOpen()) {` </div> <div class="line number523 index522 alt2"> ` ``if (mOpenedListener != null)` </div> <div class="line number524 index523 alt1"> ` ``mOpenedListener.onOpened();` </div> <div class="line number525 index524 alt2"> ` ``} else {` </div> <div class="line number526 index525 alt1"> ` ``if (mClosedListener != null)` </div> <div class="line number527 index526 alt2"> ` ``mClosedListener.onClosed();` </div> <div class="line number528 index527 alt1"> ` ``}` </div> <div class="line number529 index528 alt2"> ` ``}` </div> <div class="line number530 index529 alt1"> ` ``mScrolling = false;` </div> <div class="line number531 index530 alt2"> ` ``}` </div> <div class="line number532 index531 alt1"> </div> <div class="line number533 index532 alt2"> ` ``protected int mTouchMode = SlidingMenu.TOUCHMODE_MARGIN;` </div> <div class="line number534 index533 alt1"> </div> <div class="line number535 index534 alt2"> ` ``public void setTouchMode(int i) {` </div> <div class="line number536 index535 alt1"> ` ``mTouchMode = i;` </div> <div class="line number537 index536 alt2"> ` ``}` </div> <div class="line number538 index537 alt1"> </div> <div class="line number539 index538 alt2"> ` ``public int getTouchMode() {` </div> <div class="line number540 index539 alt1"> ` ``return mTouchMode;` </div> <div class="line number541 index540 alt2"> ` ``}` </div> <div class="line number542 index541 alt1"> </div> <div class="line number543 index542 alt2"> ` ``private boolean thisTouchAllowed(MotionEvent ev) {` </div> <div class="line number544 index543 alt1"> ` ``int x = (int) (ev.getX() + mScrollX);` </div> <div class="line number545 index544 alt2"> ` ``if (isMenuOpen()) {` </div> <div class="line number546 index545 alt1"> ` ``return mViewBehind.menuOpenTouchAllowed(mContent, mCurItem, x);` </div> <div class="line number547 index546 alt2"> ` ``} else {` </div> <div class="line number548 index547 alt1"> ` ``switch (mTouchMode) {` </div> <div class="line number549 index548 alt2"> ` ``case SlidingMenu.TOUCHMODE_FULLSCREEN:` </div> <div class="line number550 index549 alt1"> ` ``return !isInIgnoredView(ev);` </div> <div class="line number551 index550 alt2"> ` ``case SlidingMenu.TOUCHMODE_NONE:` </div> <div class="line number552 index551 alt1"> ` ``return false;` </div> <div class="line number553 index552 alt2"> ` ``case SlidingMenu.TOUCHMODE_MARGIN:` </div> <div class="line number554 index553 alt1"> ` ``return mViewBehind.marginTouchAllowed(mContent, x);` </div> <div class="line number555 index554 alt2"> ` ``}` </div> <div class="line number556 index555 alt1"> ` ``}` </div> <div class="line number557 index556 alt2"> ` ``return false;` </div> <div class="line number558 index557 alt1"> ` ``}` </div> <div class="line number559 index558 alt2"> </div> <div class="line number560 index559 alt1"> ` ``private boolean thisSlideAllowed(float dx) {` </div> <div class="line number561 index560 alt2"> ` ``boolean allowed = false;` </div> <div class="line number562 index561 alt1"> ` ``if (isMenuOpen()) {` </div> <div class="line number563 index562 alt2"> ` ``allowed = mViewBehind.menuOpenSlideAllowed(dx);` </div> <div class="line number564 index563 alt1"> ` ``} else {` </div> <div class="line number565 index564 alt2"> ` ``allowed = mViewBehind.menuClosedSlideAllowed(dx);` </div> <div class="line number566 index565 alt1"> ` ``}` </div> <div class="line number567 index566 alt2"> ` ``if (DEBUG)` </div> <div class="line number568 index567 alt1"> ` ``Log.v(TAG, "this slide allowed " + allowed + " dx: " + dx);` </div> <div class="line number569 index568 alt2"> ` ``return allowed;` </div> <div class="line number570 index569 alt1"> ` ``}` </div> <div class="line number571 index570 alt2"> </div> <div class="line number572 index571 alt1"> ` ``private int getPointerIndex(MotionEvent ev, int id) {` </div> <div class="line number573 index572 alt2"> ` ``int activePointerIndex = MotionEventCompat.findPointerIndex(ev, id);` </div> <div class="line number574 index573 alt1"> ` ``if (activePointerIndex == -1)` </div> <div class="line number575 index574 alt2"> ` ``mActivePointerId = INVALID_POINTER;` </div> <div class="line number576 index575 alt1"> ` ``return activePointerIndex;` </div> <div class="line number577 index576 alt2"> ` ``}` </div> <div class="line number578 index577 alt1"> </div> <div class="line number579 index578 alt2"> ` ``private boolean mQuickReturn = false;` </div> <div class="line number580 index579 alt1"> </div> <div class="line number581 index580 alt2"> ` ``@Override` </div> <div class="line number582 index581 alt1"> ` ``public boolean onInterceptTouchEvent(MotionEvent ev) {` </div> <div class="line number583 index582 alt2"> </div> <div class="line number584 index583 alt1"> ` ``if (!mEnabled)` </div> <div class="line number585 index584 alt2"> ` ``return false;` </div> <div class="line number586 index585 alt1"> </div> <div class="line number587 index586 alt2"> ` ``final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;` </div> <div class="line number588 index587 alt1"> </div> <div class="line number589 index588 alt2"> ` ``if (DEBUG)` </div> <div class="line number590 index589 alt1"> ` ``if (action == MotionEvent.ACTION_DOWN)` </div> <div class="line number591 index590 alt2"> ` ``Log.v(TAG, "Received ACTION_DOWN");` </div> <div class="line number592 index591 alt1"> </div> <div class="line number593 index592 alt2"> ` ``if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP` </div> <div class="line number594 index593 alt1"> ` ``|| (action != MotionEvent.ACTION_DOWN && mIsUnableToDrag)) {` </div> <div class="line number595 index594 alt2"> ` ``endDrag();` </div> <div class="line number596 index595 alt1"> ` ``return false;` </div> <div class="line number597 index596 alt2"> ` ``}` </div> <div class="line number598 index597 alt1"> </div> <div class="line number599 index598 alt2"> ` ``switch (action) {` </div> <div class="line number600 index599 alt1"> ` ``case MotionEvent.ACTION_MOVE:` </div> <div class="line number601 index600 alt2"> ` ``determineDrag(ev);` </div> <div class="line number602 index601 alt1"> ` ``break;` </div> <div class="line number603 index602 alt2"> ` ``case MotionEvent.ACTION_DOWN:` </div> <div class="line number604 index603 alt1"> ` ``int index = MotionEventCompat.getActionIndex(ev);` </div> <div class="line number605 index604 alt2"> ` ``mActivePointerId = MotionEventCompat.getPointerId(ev, index);` </div> <div class="line number606 index605 alt1"> ` ``if (mActivePointerId == INVALID_POINTER)` </div> <div class="line number607 index606 alt2"> ` ``break;` </div> <div class="line number608 index607 alt1"> ` ``mLastMotionX = mInitialMotionX = MotionEventCompat.getX(ev, index);` </div> <div class="line number609 index608 alt2"> ` ``mLastMotionY = MotionEventCompat.getY(ev, index);` </div> <div class="line number610 index609 alt1"> ` ``if (thisTouchAllowed(ev)) {` </div> <div class="line number611 index610 alt2"> ` ``mIsBeingDragged = false;` </div> <div class="line number612 index611 alt1"> ` ``mIsUnableToDrag = false;` </div> <div class="line number613 index612 alt2"> ` ``if (isMenuOpen() && mViewBehind.menuTouchInQuickReturn(mContent, mCurItem, ev.getX() + mScrollX)) {` </div> <div class="line number614 index613 alt1"> ` ``mQuickReturn = true;` </div> <div class="line number615 index614 alt2"> ` ``}` </div> <div class="line number616 index615 alt1"> ` ``} else {` </div> <div class="line number617 index616 alt2"> ` ``mIsUnableToDrag = true;` </div> <div class="line number618 index617 alt1"> ` ``}` </div> <div class="line number619 index618 alt2"> ` ``break;` </div> <div class="line number620 index619 alt1"> ` ``case MotionEventCompat.ACTION_POINTER_UP:` </div> <div class="line number621 index620 alt2"> ` ``onSecondaryPointerUp(ev);` </div> <div class="line number622 index621 alt1"> ` ``break;` </div> <div class="line number623 index622 alt2"> ` ``}` </div> <div class="line number624 index623 alt1"> </div> <div class="line number625 index624 alt2"> ` ``if (!mIsBeingDragged) {` </div> <div class="line number626 index625 alt1"> ` ``if (mVelocityTracker == null) {` </div> <div class="line number627 index626 alt2"> ` ``mVelocityTracker = VelocityTracker.obtain();` </div> <div class="line number628 index627 alt1"> ` ``}` </div> <div class="line number629 index628 alt2"> ` ``mVelocityTracker.addMovement(ev);` </div> <div class="line number630 index629 alt1"> ` ``}` </div> <div class="line number631 index630 alt2"> ` ``return mIsBeingDragged || mQuickReturn;` </div> <div class="line number632 index631 alt1"> ` ``}` </div> <div class="line number633 index632 alt2"> </div> <div class="line number634 index633 alt1"> ` ``@Override` </div> <div class="line number635 index634 alt2"> ` ``public boolean onTouchEvent(MotionEvent ev) {` </div> <div class="line number636 index635 alt1"> </div> <div class="line number637 index636 alt2"> ` ``if (!mEnabled)` </div> <div class="line number638 index637 alt1"> ` ``return false;` </div> <div class="line number639 index638 alt2"> </div> <div class="line number640 index639 alt1"> ` ``if (!mIsBeingDragged && !thisTouchAllowed(ev))` </div> <div class="line number641 index640 alt2"> ` ``return false;` </div> <div class="line number642 index641 alt1"> </div> <div class="line number643 index642 alt2"> ` ``// if (!mIsBeingDragged && !mQuickReturn)` </div> <div class="line number644 index643 alt1"> ` ``// return false;` </div> <div class="line number645 index644 alt2"> </div> <div class="line number646 index645 alt1"> ` ``final int action = ev.getAction();` </div> <div class="line number647 index646 alt2"> </div> <div class="line number648 index647 alt1"> ` ``if (mVelocityTracker == null) {` </div> <div class="line number649 index648 alt2"> ` ``mVelocityTracker = VelocityTracker.obtain();` </div> <div class="line number650 index649 alt1"> ` ``}` </div> <div class="line number651 index650 alt2"> ` ``mVelocityTracker.addMovement(ev);` </div> <div class="line number652 index651 alt1"> </div> <div class="line number653 index652 alt2"> ` ``switch (action & MotionEventCompat.ACTION_MASK) {` </div> <div class="line number654 index653 alt1"> ` ``case MotionEvent.ACTION_DOWN:` </div> <div class="line number655 index654 alt2"> ` ``/*` </div> <div class="line number656 index655 alt1"> ` ``* If being flinged and user touches, stop the fling. isFinished` </div> <div class="line number657 index656 alt2"> ` ``* will be false if being flinged.` </div> <div class="line number658 index657 alt1"> ` ``*/` </div> <div class="line number659 index658 alt2"> ` ``completeScroll();` </div> <div class="line number660 index659 alt1"> </div> <div class="line number661 index660 alt2"> ` ``// Remember where the motion event started` </div> <div class="line number662 index661 alt1"> ` ``int index = MotionEventCompat.getActionIndex(ev);` </div> <div class="line number663 index662 alt2"> ` ``mActivePointerId = MotionEventCompat.getPointerId(ev, index);` </div> <div class="line number664 index663 alt1"> ` ``mLastMotionX = mInitialMotionX = ev.getX();` </div> <div class="line number665 index664 alt2"> ` ``break;` </div> <div class="line number666 index665 alt1"> ` ``case MotionEvent.ACTION_MOVE:` </div> <div class="line number667 index666 alt2"> ` ``if (!mIsBeingDragged) {` </div> <div class="line number668 index667 alt1"> ` ``determineDrag(ev);` </div> <div class="line number669 index668 alt2"> ` ``if (mIsUnableToDrag)` </div> <div class="line number670 index669 alt1"> ` ``return false;` </div> <div class="line number671 index670 alt2"> ` ``}` </div> <div class="line number672 index671 alt1"> ` ``if (mIsBeingDragged) {` </div> <div class="line number673 index672 alt2"> ` ``// Scroll to follow the motion event` </div> <div class="line number674 index673 alt1"> ` ``final int activePointerIndex = getPointerIndex(ev, mActivePointerId);` </div> <div class="line number675 index674 alt2"> ` ``if (mActivePointerId == INVALID_POINTER)` </div> <div class="line number676 index675 alt1"> ` ``break;` </div> <div class="line number677 index676 alt2"> ` ``final float x = MotionEventCompat.getX(ev, activePointerIndex);` </div> <div class="line number678 index677 alt1"> ` ``final float deltaX = mLastMotionX - x;` </div> <div class="line number679 index678 alt2"> ` ``mLastMotionX = x;` </div> <div class="line number680 index679 alt1"> ` ``float oldScrollX = getScrollX();` </div> <div class="line number681 index680 alt2"> ` ``float scrollX = oldScrollX + deltaX;` </div> <div class="line number682 index681 alt1"> ` ``final float leftBound = getLeftBound();` </div> <div class="line number683 index682 alt2"> ` ``final float rightBound = getRightBound();` </div> <div class="line number684 index683 alt1"> ` ``if (scrollX &lt; leftBound) {` </div> <div class="line number685 index684 alt2"> ` ``scrollX = leftBound;` </div> <div class="line number686 index685 alt1"> ` ``} else if (scrollX &gt; rightBound) {` </div> <div class="line number687 index686 alt2"> ` ``scrollX = rightBound;` </div> <div class="line number688 index687 alt1"> ` ``}` </div> <div class="line number689 index688 alt2"> ` ``// Don't lose the rounded component` </div> <div class="line number690 index689 alt1"> ` ``mLastMotionX += scrollX - (int) scrollX;` </div> <div class="line number691 index690 alt2"> ` ``scrollTo((int) scrollX, getScrollY());` </div> <div class="line number692 index691 alt1"> ` ``pageScrolled((int) scrollX);` </div> <div class="line number693 index692 alt2"> ` ``}` </div> <div class="line number694 index693 alt1"> ` ``break;` </div> <div class="line number695 index694 alt2"> ` ``case MotionEvent.ACTION_UP:` </div> <div class="line number696 index695 alt1"> ` ``if (mIsBeingDragged) {` </div> <div class="line number697 index696 alt2"> ` ``final VelocityTracker velocityTracker = mVelocityTracker;` </div> <div class="line number698 index697 alt1"> ` ``velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);` </div> <div class="line number699 index698 alt2"> ` ``int initialVelocity = (int) VelocityTrackerCompat.getXVelocity(` </div> <div class="line number700 index699 alt1"> ` ``velocityTracker, mActivePointerId);` </div> <div class="line number701 index700 alt2"> ` ``final int scrollX = getScrollX();` </div> <div class="line number702 index701 alt1"> ` ``final float pageOffset = (float) (scrollX - getDestScrollX(mCurItem)) / getBehindWidth();` </div> <div class="line number703 index702 alt2"> ` ``final int activePointerIndex = getPointerIndex(ev, mActivePointerId);` </div> <div class="line number704 index703 alt1"> ` ``if (mActivePointerId != INVALID_POINTER) {` </div> <div class="line number705 index704 alt2"> ` ``final float x = MotionEventCompat.getX(ev, activePointerIndex);` </div> <div class="line number706 index705 alt1"> ` ``final int totalDelta = (int) (x - mInitialMotionX);` </div> <div class="line number707 index706 alt2"> ` ``int nextPage = determineTargetPage(pageOffset, initialVelocity, totalDelta);` </div> <div class="line number708 index707 alt1"> ` ``setCurrentItemInternal(nextPage, true, true, initialVelocity);` </div> <div class="line number709 index708 alt2"> ` ``} else { ` </div> <div class="line number710 index709 alt1"> ` ``setCurrentItemInternal(mCurItem, true, true, initialVelocity);` </div> <div class="line number711 index710 alt2"> ` ``}` </div> <div class="line number712 index711 alt1"> ` ``mActivePointerId = INVALID_POINTER;` </div> <div class="line number713 index712 alt2"> ` ``endDrag();` </div> <div class="line number714 index713 alt1"> ` ``} else if (mQuickReturn && mViewBehind.menuTouchInQuickReturn(mContent, mCurItem, ev.getX() + mScrollX)) {` </div> <div class="line number715 index714 alt2"> ` ``// close the menu` </div> <div class="line number716 index715 alt1"> ` ``setCurrentItem(1);` </div> <div class="line number717 index716 alt2"> ` ``endDrag();` </div> <div class="line number718 index717 alt1"> ` ``}` </div> <div class="line number719 index718 alt2"> ` ``break;` </div> <div class="line number720 index719 alt1"> ` ``case MotionEvent.ACTION_CANCEL:` </div> <div class="line number721 index720 alt2"> ` ``if (mIsBeingDragged) {` </div> <div class="line number722 index721 alt1"> ` ``setCurrentItemInternal(mCurItem, true, true);` </div> <div class="line number723 index722 alt2"> ` ``mActivePointerId = INVALID_POINTER;` </div> <div class="line number724 index723 alt1"> ` ``endDrag();` </div> <div class="line number725 index724 alt2"> ` ``}` </div> <div class="line number726 index725 alt1"> ` ``break;` </div> <div class="line number727 index726 alt2"> ` ``case MotionEventCompat.ACTION_POINTER_DOWN: {` </div> <div class="line number728 index727 alt1"> ` ``final int indexx = MotionEventCompat.getActionIndex(ev);` </div> <div class="line number729 index728 alt2"> ` ``mLastMotionX = MotionEventCompat.getX(ev, indexx);` </div> <div class="line number730 index729 alt1"> ` ``mActivePointerId = MotionEventCompat.getPointerId(ev, indexx);` </div> <div class="line number731 index730 alt2"> ` ``break;` </div> <div class="line number732 index731 alt1"> ` ``}` </div> <div class="line number733 index732 alt2"> ` ``case MotionEventCompat.ACTION_POINTER_UP:` </div> <div class="line number734 index733 alt1"> ` ``onSecondaryPointerUp(ev);` </div> <div class="line number735 index734 alt2"> ` ``int pointerIndex = getPointerIndex(ev, mActivePointerId);` </div> <div class="line number736 index735 alt1"> ` ``if (mActivePointerId == INVALID_POINTER)` </div> <div class="line number737 index736 alt2"> ` ``break;` </div> <div class="line number738 index737 alt1"> ` ``mLastMotionX = MotionEventCompat.getX(ev, pointerIndex);` </div> <div class="line number739 index738 alt2"> ` ``break;` </div> <div class="line number740 index739 alt1"> ` ``}` </div> <div class="line number741 index740 alt2"> ` ``return true;` </div> <div class="line number742 index741 alt1"> ` ``}` </div> <div class="line number743 index742 alt2"> </div> <div class="line number744 index743 alt1"> ` ``private void determineDrag(MotionEvent ev) {` </div> <div class="line number745 index744 alt2"> ` ``final int activePointerId = mActivePointerId;` </div> <div class="line number746 index745 alt1"> ` ``final int pointerIndex = getPointerIndex(ev, activePointerId);` </div> <div class="line number747 index746 alt2"> ` ``if (activePointerId == INVALID_POINTER || pointerIndex == INVALID_POINTER)` </div> <div class="line number748 index747 alt1"> ` ``return;` </div> <div class="line number749 index748 alt2"> ` ``final float x = MotionEventCompat.getX(ev, pointerIndex);` </div> <div class="line number750 index749 alt1"> ` ``final float dx = x - mLastMotionX;` </div> <div class="line number751 index750 alt2"> ` ``final float xDiff = Math.abs(dx);` </div> <div class="line number752 index751 alt1"> ` ``final float y = MotionEventCompat.getY(ev, pointerIndex);` </div> <div class="line number753 index752 alt2"> ` ``final float dy = y - mLastMotionY;` </div> <div class="line number754 index753 alt1"> ` ``final float yDiff = Math.abs(dy);` </div> <div class="line number755 index754 alt2"> ` ``if (xDiff &gt; (isMenuOpen()?mTouchSlop/2:mTouchSlop) && xDiff &gt; yDiff && thisSlideAllowed(dx)) { ` </div> <div class="line number756 index755 alt1"> ` ``startDrag();` </div> <div class="line number757 index756 alt2"> ` ``mLastMotionX = x;` </div> <div class="line number758 index757 alt1"> ` ``mLastMotionY = y;` </div> <div class="line number759 index758 alt2"> ` ``setScrollingCacheEnabled(true);` </div> <div class="line number760 index759 alt1"> ` ``// TODO add back in touch slop check` </div> <div class="line number761 index760 alt2"> ` ``} else if (xDiff &gt; mTouchSlop) {` </div> <div class="line number762 index761 alt1"> ` ``mIsUnableToDrag = true;` </div> <div class="line number763 index762 alt2"> ` ``}` </div> <div class="line number764 index763 alt1"> ` ``}` </div> <div class="line number765 index764 alt2"> </div> <div class="line number766 index765 alt1"> ` ``@Override` </div> <div class="line number767 index766 alt2"> ` ``public void scrollTo(int x, int y) {` </div> <div class="line number768 index767 alt1"> ` ``super.scrollTo(x, y);` </div> <div class="line number769 index768 alt2"> ` ``mScrollX = x;` </div> <div class="line number770 index769 alt1"> ` ``mViewBehind.scrollBehindTo(mContent, x, y);` </div> <div class="line number771 index770 alt2"> ` ``((SlidingMenu)getParent()).manageLayers(getPercentOpen());` </div> <div class="line number772 index771 alt1"> </div> <div class="line number773 index772 alt2"> ` ``if (mTransformer != null) {` </div> <div class="line number774 index773 alt1"> ` ``invalidate();` </div> <div class="line number775 index774 alt2"> ` ``}` </div> <div class="line number776 index775 alt1"> ` ``}` </div> <div class="line number777 index776 alt2"> </div> <div class="line number778 index777 alt1"> ` ``private int determineTargetPage(float pageOffset, int velocity, int deltaX) {` </div> <div class="line number779 index778 alt2"> ` ``int targetPage = mCurItem;` </div> <div class="line number780 index779 alt1"> ` ``if (Math.abs(deltaX) &gt; mFlingDistance && Math.abs(velocity) &gt; mMinimumVelocity) {` </div> <div class="line number781 index780 alt2"> ` ``if (velocity &gt; 0 && deltaX &gt; 0) {` </div> <div class="line number782 index781 alt1"> ` ``targetPage -= 1;` </div> <div class="line number783 index782 alt2"> ` ``} else if (velocity &lt; 0 && deltaX &lt; 0){` </div> <div class="line number784 index783 alt1"> ` ``targetPage += 1;` </div> <div class="line number785 index784 alt2"> ` ``}` </div> <div class="line number786 index785 alt1"> ` ``} else {` </div> <div class="line number787 index786 alt2"> ` ``targetPage = (int) Math.round(mCurItem + pageOffset);` </div> <div class="line number788 index787 alt1"> ` ``}` </div> <div class="line number789 index788 alt2"> ` ``return targetPage;` </div> <div class="line number790 index789 alt1"> ` ``}` </div> <div class="line number791 index790 alt2"> </div> <div class="line number792 index791 alt1"> ` ``protected float getPercentOpen() {` </div> <div class="line number793 index792 alt2"> ` ``return Math.abs(mScrollX-mContent.getLeft()) / getBehindWidth();` </div> <div class="line number794 index793 alt1"> ` ``}` </div> <div class="line number795 index794 alt2"> </div> <div class="line number796 index795 alt1"> ` ``@Override` </div> <div class="line number797 index796 alt2"> ` ``protected void dispatchDraw(Canvas canvas) {` </div> <div class="line number798 index797 alt1"> ` ``// 这句要注释掉,否则会出现2个右侧的视图,一个有转场动画,一个没有转场动画` </div> <div class="line number799 index798 alt2"> ` ``// super.dispatchDraw(canvas);` </div> <div class="line number800 index799 alt1"> ` ``// Draw the margin drawable if needed.` </div> <div class="line number801 index800 alt2"> ` ``mViewBehind.drawShadow(mContent, canvas);` </div> <div class="line number802 index801 alt1"> ` ``mViewBehind.drawFade(mContent, canvas, getPercentOpen());` </div> <div class="line number803 index802 alt2"> ` ``mViewBehind.drawSelector(mContent, canvas, getPercentOpen());` </div> <div class="line number804 index803 alt1"> ` ``// 设置右侧视图的转场效果,主要是修改Canvas。` </div> <div class="line number805 index804 alt2"> ` ``if (mTransformer != null) {` </div> <div class="line number806 index805 alt1"> ` ``canvas.save();` </div> <div class="line number807 index806 alt2"> ` ``mTransformer.transformCanvas(canvas, getPercentOpen());` </div> <div class="line number808 index807 alt1"> ` ``super.dispatchDraw(canvas);` </div> <div class="line number809 index808 alt2"> ` ``canvas.restore();` </div> <div class="line number810 index809 alt1"> ` ``} else {` </div> <div class="line number811 index810 alt2"> ` ``super.dispatchDraw(canvas);` </div> <div class="line number812 index811 alt1"> ` ``}` </div> <div class="line number813 index812 alt2"> ` ``}` </div> <div class="line number814 index813 alt1"> </div> <div class="line number815 index814 alt2"> ` ``// variables for drawing` </div> <div class="line number816 index815 alt1"> ` ``private float mScrollX = 0.0f;` </div> <div class="line number817 index816 alt2"> </div> <div class="line number818 index817 alt1"> ` ``private void onSecondaryPointerUp(MotionEvent ev) {` </div> <div class="line number819 index818 alt2"> ` ``if (DEBUG) Log.v(TAG, "onSecondaryPointerUp called");` </div> <div class="line number820 index819 alt1"> ` ``final int pointerIndex = MotionEventCompat.getActionIndex(ev);` </div> <div class="line number821 index820 alt2"> ` ``final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex);` </div> <div class="line number822 index821 alt1"> ` ``if (pointerId == mActivePointerId) {` </div> <div class="line number823 index822 alt2"> ` ``// This was our active pointer going up. Choose a new` </div> <div class="line number824 index823 alt1"> ` ``// active pointer and adjust accordingly.` </div> <div class="line number825 index824 alt2"> ` ``final int newPointerIndex = pointerIndex == 0 ? 1 : 0;` </div> <div class="line number826 index825 alt1"> ` ``mLastMotionX = MotionEventCompat.getX(ev, newPointerIndex);` </div> <div class="line number827 index826 alt2"> ` ``mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex);` </div> <div class="line number828 index827 alt1"> ` ``if (mVelocityTracker != null) {` </div> <div class="line number829 index828 alt2"> ` ``mVelocityTracker.clear();` </div> <div class="line number830 index829 alt1"> ` ``}` </div> <div class="line number831 index830 alt2"> ` ``}` </div> <div class="line number832 index831 alt1"> ` ``}` </div> <div class="line number833 index832 alt2"> </div> <div class="line number834 index833 alt1"> ` ``private void startDrag() {` </div> <div class="line number835 index834 alt2"> ` ``mIsBeingDragged = true;` </div> <div class="line number836 index835 alt1"> ` ``mQuickReturn = false;` </div> <div class="line number837 index836 alt2"> ` ``}` </div> <div class="line number838 index837 alt1"> </div> <div class="line number839 index838 alt2"> ` ``private void endDrag() {` </div> <div class="line number840 index839 alt1"> ` ``mQuickReturn = false;` </div> <div class="line number841 index840 alt2"> ` ``mIsBeingDragged = false;` </div> <div class="line number842 index841 alt1"> ` ``mIsUnableToDrag = false;` </div> <div class="line number843 index842 alt2"> ` ``mActivePointerId = INVALID_POINTER;` </div> <div class="line number844 index843 alt1"> </div> <div class="line number845 index844 alt2"> ` ``if (mVelocityTracker != null) {` </div> <div class="line number846 index845 alt1"> ` ``mVelocityTracker.recycle();` </div> <div class="line number847 index846 alt2"> ` ``mVelocityTracker = null;` </div> <div class="line number848 index847 alt1"> ` ``}` </div> <div class="line number849 index848 alt2"> ` ``}` </div> <div class="line number850 index849 alt1"> </div> <div class="line number851 index850 alt2"> ` ``private void setScrollingCacheEnabled(boolean enabled) {` </div> <div class="line number852 index851 alt1"> ` ``if (mScrollingCacheEnabled != enabled) {` </div> <div class="line number853 index852 alt2"> ` ``mScrollingCacheEnabled = enabled;` </div> <div class="line number854 index853 alt1"> ` ``if (USE_CACHE) {` </div> <div class="line number855 index854 alt2"> ` ``final int size = getChildCount();` </div> <div class="line number856 index855 alt1"> ` ``for (int i = 0; i &lt; size; ++i) {` </div> <div class="line number857 index856 alt2"> ` ``final View child = getChildAt(i);` </div> <div class="line number858 index857 alt1"> ` ``if (child.getVisibility() != GONE) {` </div> <div class="line number859 index858 alt2"> ` ``child.setDrawingCacheEnabled(enabled);` </div> <div class="line number860 index859 alt1"> ` ``}` </div> <div class="line number861 index860 alt2"> ` ``}` </div> <div class="line number862 index861 alt1"> ` ``}` </div> <div class="line number863 index862 alt2"> ` ``}` </div> <div class="line number864 index863 alt1"> ` ``}` </div> <div class="line number865 index864 alt2"> </div> <div class="line number866 index865 alt1"> ` ``/**` </div> <div class="line number867 index866 alt2"> ` ``* Tests scrollability within child views of v given a delta of dx.` </div> <div class="line number868 index867 alt1"> ` ``*` </div> <div class="line number869 index868 alt2"> ` ``* @param v View to test for horizontal scrollability` </div> <div class="line number870 index869 alt1"> ` ``* @param checkV Whether the view v passed should itself be checked for scrollability (true),` </div> <div class="line number871 index870 alt2"> ` ``* or just its children (false).` </div> <div class="line number872 index871 alt1"> ` ``* @param dx Delta scrolled in pixels` </div> <div class="line number873 index872 alt2"> ` ``* @param x X coordinate of the active touch point` </div> <div class="line number874 index873 alt1"> ` ``* @param y Y coordinate of the active touch point` </div> <div class="line number875 index874 alt2"> ` ``* @return true if child views of v can be scrolled by delta of dx.` </div> <div class="line number876 index875 alt1"> ` ``*/` </div> <div class="line number877 index876 alt2"> ` ``protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {` </div> <div class="line number878 index877 alt1"> ` ``if (v instanceof ViewGroup) {` </div> <div class="line number879 index878 alt2"> ` ``final ViewGroup group = (ViewGroup) v;` </div> <div class="line number880 index879 alt1"> ` ``final int scrollX = v.getScrollX();` </div> <div class="line number881 index880 alt2"> ` ``final int scrollY = v.getScrollY();` </div> <div class="line number882 index881 alt1"> ` ``final int count = group.getChildCount();` </div> <div class="line number883 index882 alt2"> ` ``// Count backwards - let topmost views consume scroll distance first.` </div> <div class="line number884 index883 alt1"> ` ``for (int i = count - 1; i &gt;= 0; i--) {` </div> <div class="line number885 index884 alt2"> ` ``final View child = group.getChildAt(i);` </div> <div class="line number886 index885 alt1"> ` ``if (x + scrollX &gt;= child.getLeft() && x + scrollX &lt; child.getRight() &&` </div> <div class="line number887 index886 alt2"> ` ``y + scrollY &gt;= child.getTop() && y + scrollY &lt; child.getBottom() &&` </div> <div class="line number888 index887 alt1"> ` ``canScroll(child, true, dx, x + scrollX - child.getLeft(),` </div> <div class="line number889 index888 alt2"> ` ``y + scrollY - child.getTop())) {` </div> <div class="line number890 index889 alt1"> ` ``return true;` </div> <div class="line number891 index890 alt2"> ` ``}` </div> <div class="line number892 index891 alt1"> ` ``}` </div> <div class="line number893 index892 alt2"> ` ``}` </div> <div class="line number894 index893 alt1"> </div> <div class="line number895 index894 alt2"> ` ``return checkV && ViewCompat.canScrollHorizontally(v, -dx);` </div> <div class="line number896 index895 alt1"> ` ``}` </div> <div class="line number897 index896 alt2"> </div> <div class="line number898 index897 alt1"> ` ``@Override` </div> <div class="line number899 index898 alt2"> ` ``public boolean dispatchKeyEvent(KeyEvent event) {` </div> <div class="line number900 index899 alt1"> ` ``// Let the focused view and/or our descendants get the key first` </div> <div class="line number901 index900 alt2"> ` ``return super.dispatchKeyEvent(event) || executeKeyEvent(event);` </div> <div class="line number902 index901 alt1"> ` ``}` </div> <div class="line number903 index902 alt2"> </div> <div class="line number904 index903 alt1"> ` ``/**` </div> <div class="line number905 index904 alt2"> ` ``* You can call this function yourself to have the scroll view perform` </div> <div class="line number906 index905 alt1"> ` ``* scrolling from a key event, just as if the event had been dispatched to` </div> <div class="line number907 index906 alt2"> ` ``* it by the view hierarchy.` </div> <div class="line number908 index907 alt1"> ` ``*` </div> <div class="line number909 index908 alt2"> ` ``* @param event The key event to execute.` </div> <div class="line number910 index909 alt1"> ` ``* @return Return true if the event was handled, else false.` </div> <div class="line number911 index910 alt2"> ` ``*/` </div> <div class="line number912 index911 alt1"> ` ``public` `boolean` `executeKeyEvent(KeyEvent event) {` </div> <div class="line number913 index912 alt2"> ` ``boolean` `handled = ``false``;` </div> <div class="line number914 index913 alt1"> ` ``if` `(event.getAction() == KeyEvent.ACTION_DOWN) {` </div> <div class="line number915 index914 alt2"> ` ``switch` `(event.getKeyCode()) {` </div> <div class="line number916 index915 alt1"> ` ``case` `KeyEvent.KEYCODE_DPAD_LEFT:` </div> <div class="line number917 index916 alt2"> ` ``handled = arrowScroll(FOCUS_LEFT);` </div> <div class="line number918 index917 alt1"> ` ``break``;` </div> <div class="line number919 index918 alt2"> ` ``case` `KeyEvent.KEYCODE_DPAD_RIGHT:` </div> <div class="line number920 index919 alt1"> ` ``handled = arrowScroll(FOCUS_RIGHT);` </div> <div class="line number921 index920 alt2"> ` ``break``;` </div> <div class="line number922 index921 alt1"> ` ``case` `KeyEvent.KEYCODE_TAB:` </div> <div class="line number923 index922 alt2"> ` ``if` `(Build.VERSION.SDK_INT &gt;= ``11``) {` </div> <div class="line number924 index923 alt1"> ` ``// The focus finder had a bug handling FOCUS_FORWARD and FOCUS_BACKWARD` </div> <div class="line number925 index924 alt2"> ` ``// before Android 3.0. Ignore the tab key on those devices.` </div> <div class="line number926 index925 alt1"> ` ``if` `(KeyEventCompat.hasNoModifiers(event)) {` </div> <div class="line number927 index926 alt2"> ` ``handled = arrowScroll(FOCUS_FORWARD);` </div> <div class="line number928 index927 alt1"> ` ``} ``else` `if` `(KeyEventCompat.hasModifiers(event, KeyEvent.META_SHIFT_ON)) {` </div> <div class="line number929 index928 alt2"> ` ``handled = arrowScroll(FOCUS_BACKWARD);` </div> <div class="line number930 index929 alt1"> ` ``}` </div> <div class="line number931 index930 alt2"> ` ``}` </div> <div class="line number932 index931 alt1"> ` ``break``;` </div> <div class="line number933 index932 alt2"> ` ``}` </div> <div class="line number934 index933 alt1"> ` ``}` </div> <div class="line number935 index934 alt2"> ` ``return` `handled;` </div> <div class="line number936 index935 alt1"> ` ``}` </div> <div class="line number937 index936 alt2"> </div> <div class="line number938 index937 alt1"> ` ``public` `boolean` `arrowScroll(``int` `direction) {` </div> <div class="line number939 index938 alt2"> ` ``View currentFocused = findFocus();` </div> <div class="line number940 index939 alt1"> ` ``if` `(currentFocused == ``this``) currentFocused = ``null``;` </div> <div class="line number941 index940 alt2"> </div> <div class="line number942 index941 alt1"> ` ``boolean` `handled = ``false``;` </div> <div class="line number943 index942 alt2"> </div> <div class="line number944 index943 alt1"> ` ``View nextFocused = FocusFinder.getInstance().findNextFocus(``this``, currentFocused,` </div> <div class="line number945 index944 alt2"> ` ``direction);` </div> <div class="line number946 index945 alt1"> ` ``if` `(nextFocused != ``null` `&& nextFocused != currentFocused) {` </div> <div class="line number947 index946 alt2"> ` ``if` `(direction == View.FOCUS_LEFT) {` </div> <div class="line number948 index947 alt1"> ` ``handled = nextFocused.requestFocus();` </div> <div class="line number949 index948 alt2"> ` ``} ``else` `if` `(direction == View.FOCUS_RIGHT) {` </div> <div class="line number950 index949 alt1"> ` ``// If there is nothing to the right, or this is causing us to` </div> <div class="line number951 index950 alt2"> ` ``// jump to the left, then what we really want to do is page right.` </div> <div class="line number952 index951 alt1"> ` ``if` `(currentFocused != ``null` `&& nextFocused.getLeft() &lt;= currentFocused.getLeft()) {` </div> <div class="line number953 index952 alt2"> ` ``handled = pageRight();` </div> <div class="line number954 index953 alt1"> ` ``} ``else` `{` </div> <div class="line number955 index954 alt2"> ` ``handled = nextFocused.requestFocus();` </div> <div class="line number956 index955 alt1"> ` ``}` </div> <div class="line number957 index956 alt2"> ` ``}` </div> <div class="line number958 index957 alt1"> ` ``} ``else` `if` `(direction == FOCUS_LEFT || direction == FOCUS_BACKWARD) {` </div> <div class="line number959 index958 alt2"> ` ``// Trying to move left and nothing there; try to page.` </div> <div class="line number960 index959 alt1"> ` ``handled = pageLeft();` </div> <div class="line number961 index960 alt2"> ` ``} ``else` `if` `(direction == FOCUS_RIGHT || direction == FOCUS_FORWARD) {` </div> <div class="line number962 index961 alt1"> ` ``// Trying to move right and nothing there; try to page.` </div> <div class="line number963 index962 alt2"> ` ``handled = pageRight();` </div> <div class="line number964 index963 alt1"> ` ``}` </div> <div class="line number965 index964 alt2"> ` ``if` `(handled) {` </div> <div class="line number966 index965 alt1"> ` ``playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));` </div> <div class="line number967 index966 alt2"> ` ``}` </div> <div class="line number968 index967 alt1"> ` ``return` `handled;` </div> <div class="line number969 index968 alt2"> ` ``}` </div> <div class="line number970 index969 alt1"> </div> <div class="line number971 index970 alt2"> ` ``boolean` `pageLeft() {` </div> <div class="line number972 index971 alt1"> ` ``if` `(mCurItem &gt; ````) {` </div> <div class="line number973 index972 alt2"> ` ``setCurrentItem(mCurItem-``1``, ``true``);` </div> <div class="line number974 index973 alt1"> ` ``return` `true``;` </div> <div class="line number975 index974 alt2"> ` ``}` </div> <div class="line number976 index975 alt1"> ` ``return` `false``;` </div> <div class="line number977 index976 alt2"> ` ``}` </div> <div class="line number978 index977 alt1"> </div> <div class="line number979 index978 alt2"> ` ``boolean` `pageRight() {` </div> <div class="line number980 index979 alt1"> ` ``if` `(mCurItem &lt; ``1``) {` </div> <div class="line number981 index980 alt2"> ` ``setCurrentItem(mCurItem+``1``, ``true``);` </div> <div class="line number982 index981 alt1"> ` ``return` `true``;` </div> <div class="line number983 index982 alt2"> ` ``}` </div> <div class="line number984 index983 alt1"> ` ``return` `false``;` </div> <div class="line number985 index984 alt2"> ` ``}` </div> <div class="line number986 index985 alt1"> </div> <div class="line number987 index986 alt2"> ` ``public` `void` `setCanvasTransformer(CanvasTransformer t) {` </div> <div class="line number988 index987 alt1"> ` ``mTransformer = t;` </div> <div class="line number989 index988 alt2"> ` ``}` </div> <div class="line number990 index989 alt1"> </div> <div class="line number991 index990 alt2"> `}` </div> </div> </td> </tr> </table> 如果想要使用这个侧滑菜单的动画效果,直接替换这两个类即可。同时,并不会影响SlidingMenu的固有功能。 ...

2015年3月3日 · 175 分钟 · 天边的星星

圆形进度(ProgressWheel)

This is a custom component for Android intended for use instead of a progress bar. {#user-content-a-complete-walkthrough-of-how-to-use-this-component-in-your-app.anchor}A complete walkthrough of how to use this component in your app XML: To implement the view in your xml layout do the following: Add the following to your attrs.xml file (in res/values): ``` <declare-styleable name="ProgressWheel"> <attr name="text" format="string" /> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="barColor" format="color" /> <attr name="rimColor" format="color" /> <attr name="rimWidth" format="dimension" /> <attr name="spinSpeed" format="integer" /> <attr name="circleColor" format="color" /> <attr name="radius" format="dimension" /> <attr name="barWidth" format="dimension" /> <attr name="barLength" format="dimension" /> <attr name="delayMillis" format="dimension"/> <attr name="contourColor" format="color"/> <attr name="contourSize" format="float"/> </declare-styleable> ``` Add the following code to the root view of your layout:xmlns:ProgressWheel="http://schemas.android.com/apk/res/com.visualdenim.schooltraq" ...

2015年1月6日 · 2 分钟 · 天边的星星

解决谷歌google不能访问造成wordpress打开缓慢的问题

1. 前台页面访问Google AJAX Libraries API(一般多是在主题里调用的) AJAX Libraries API架构在Google Code上,提供了JQuery 等JavaScript库,本来CDN是为我们提供更快更稳定的访问,但是无奈在国内我们没法正常享受谷歌的CDN服务啊。那我们只有转投国内了。现在国内也有很好的CDN服务,并且在国内还是使用国内的CDN公共库比较安全,下面先提供几个服务链接供您选择吧: http://lib.sinaapp.com/ http://developer.baidu.com/wiki/index.php?title=docs/cplat/libs http://www.staticfile.org/ http://jscdn.upai.com/ 下面说解决办法,以替换成百度CDN为例: 一般是在主题模板的header.php文件中找到引用谷歌CDN的代码处,比如我的是这句: ``` <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js?ver=3.4.2'></script> ``` 替换成百度CDN: ``` <script type='text/javascript' src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script> ``` ** 后台页面获取Google字体库** 这个问题有两个解决办法,分别适用于两类使用人群 2.1 后台无所谓字体好看不好看,决定彻底不使用谷歌字体了; 解决办法:在wordpress 后台安装插件。在插件中搜索 Disable Google Fonts,选择安装,然后启用,这样就可以禁止Google字体的加载。 2.2 强迫症+完美主义:稍微麻烦点把字体拿回来放自己服务器上吧,需要FQ一下哦。 解决办法: a. 就目前现状访问下谷歌是件不容易的事情,那我们需要FQ或是其他办法先把那些个字体文件下载回来,首先利用ie的开发人员工具、chrome开发者工具、firefox firebug工具 中的network查看页面加载时访问谷歌字体服务的URL,复制此URL在浏览器中打开(FQ中),这时我们看到了字体描述文件内容,并且找到了woff文件的url,分别把这几个woff文件下载下来; b. 将下载好的woff文件(文件名不做修改了,偷懒)放在\wp-includes\fonts\google 目录中, google是我自建的; c. 拷贝a步骤URL显示内容,另存为一个css文件,把字体访问url改成我们本地的访问路径,命名为google-font.css 放在\wp-includes\css目录中(附该css文件的内容如下); ![复制代码](http://common.cnblogs.com/images/copycode.gif) ``` @font-face { font-family: ‘Open Sans’; font-style: normal; font-weight: 300; src: local(‘Open Sans Light’), local(‘OpenSans-Light’), url(../fonts/google/DXI1ORHCpsQm3Vp6mXoaTRa1RVmPjeKy21_GQJaLlJI.woff) format(‘woff’); } @font-face { font-family: ‘Open Sans’; font-style: normal; font-weight: 400; src: local(‘Open Sans’), local(‘OpenSans’), url(../fonts/google/u-WUoqrET9fUeobQW7jkRT8E0i7KZn-EPnyo3HZu7kw.woff) format(‘woff’); } @font-face { font-family: ‘Open Sans’; font-style: normal; font-weight: 600; src: local(‘Open Sans Semibold’), local(‘OpenSans-Semibold’), url(../fonts/google/MTP_ySUJH_bn48VBG8sNSha1RVmPjeKy21_GQJaLlJI.woff) format(‘woff’); } @font-face { font-family: ‘Open Sans’; font-style: italic; font-weight: 300; src: local(‘Open Sans Light Italic’), local(‘OpenSansLight-Italic’), url(../fonts/google/PRmiXeptR36kaC0GEAetxrsuoFAk0leveMLeqYtnfAY.woff) format(‘woff’); } @font-face { font-family: ‘Open Sans’; font-style: italic; font-weight: 400; src: local(‘Open Sans Italic’), local(‘OpenSans-Italic’), url(../fonts/google/xjAJXh38I15wypJXxuGMBtIh4imgI8P11RFo6YPCPC0.woff) format(‘woff’); } @font-face { font-family: ‘Open Sans’; font-style: italic; font-weight: 600; src: local(‘Open Sans Semibold Italic’), local(‘OpenSans-SemiboldItalic’), url(../fonts/google/PRmiXeptR36kaC0GEAetxmWeb5PoA5ztb49yLyUzH1A.woff) format(‘woff’); } ...

2014年11月14日 · 1 分钟 · 天边的星星

Html5无刷新修改Url,history pushState/replaceState

一、认识window.history window.history表示window对象的历史记录,是由用户主动产生,并且接受javascript脚本控制的全局对象。window对象通过history对象提供对览器历史记录的访问能力。它暴露了一些非常有用的方法和属性,让你在历史记录中自由前进和后退。 1、历史记录的前进和后退 在历史记录中后退,可以这么做: 1. window.history.back(); 这就像用户点击浏览器的后退按钮一样。 类似的,你可以前进,就像在浏览器中点击前进按钮,像这样: window.history.forward(); 2、移动到指定历史记录点 通过指定一个相对于当前页面位置的数值,你可以使用go()方法从当前会话的历史记录中加载页面(当前页面位置索引值为0,上一页就是-1,下一页为1)。 要后退一页(相当于调用back()): 1. window.history.go(-1); 向前移动一页(相当于调用forward()): 1. window.history.go(1); 类似的,传递参数“2”,你就可以向前移动2个记录点。你可以查看length属性值,了解历史记录栈中一共有多少个记录点: 1. window.history.length; 二、修改历史记录点 HTML5的新API扩展了window.history,使历史记录点更加开放了。可以存储当前历史记录点、替换当前历史记录点、监听历史记录点,下面逐一简要说明一下。 1、存储当前历史记录点 存储的方式类似于数组的入栈(Array.push()),在window.history里新增一个历史记录点,例如: 1. // 当前的url为:http://www.qingdou.me/index.html 2. var json={time:new Date().getTime()}; 3. // @状态对象:记录历史记录点的额外对象,可以为空 4. // @页面标题:目前所有浏览器都不支持 5. // @可选的url:浏览器不会检查url是否存在,只改变url,url必须同域,不能跨域 6. window.history.pushState(json,””,”http://www.qingdou.me/post-1.html”); 执行了pushState方法后,页面的url地址为http://www.qingdou.me/post-1.html。 2、替换当前历史记录点 window.history.replaceState和window.history.pushState类似,不同之处在于replaceState不会在window.history里新增历史记录点,其效果类似于window.location.replace(url),都是不会在历史记录点里新增一个记录点的。当你为了响应用户的某些操作,而要更新当前历史记录条目的状态对象或URL时,使用replaceState()方法会特别合适。 3、监听历史记录点 监听历史记录点,直观的可认为是监听URL的变化,但会忽略URL的hash部分,监听URL的hash部分,HTML5有新的API为onhashchange,我的博客里也有说到该方法和跨浏览器的兼容解决方案。可以通过window.onpopstate来监听url的变化,并且可以获取存储在该历史记录点的状态对象,也就是上文说到的json对象,如: 1. // 当前的url为:http://www.qingdou.me/post-1.html 2. window.onpopstate=function() 3. { 4. // 获得存储在该历史记录点的json对象 5. var json=window.history.state; 6. // 点击一次回退到:http://www.qingdou.me/index.html 7. // 获得的json为null 8. // 再点击一次前进到:http://www.qingdou.me/post-1.html ...

2014年10月17日 · 1 分钟 · 天边的星星

Android SwipeRefreshLayout 官方下拉刷新控件介绍

下面App基本都有下拉刷新的功能,以前基本都使用XListView或者自己写一个下拉刷新,近期Google提供了一个官方的下拉刷新控件SwipeRefreshLayout,我感觉还不错啊,见惯了传统的下拉刷新,这个反而给人耳目一新的感觉(貌似知乎的APP已经使用这种下拉刷新了)。 Google也在官方网站给出了V4的兼容包: ![](http://img.blog.csdn.net/20140426143208625?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1qNjIzNTY1Nzkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 顺便看一眼API呗: ![](http://img.blog.csdn.net/20140426143234968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1qNjIzNTY1Nzkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 和XlistView差不多,还是很方便使用的,大概就这4个常用的方法,下面贴个简单的例子。 1、布局文件: &nbsp; **[html]** [view plain](http://blog.csdn.net/lmj623565791/article/details/24521483#)[copy](http://blog.csdn.net/lmj623565791/article/details/24521483#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/313476)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/313476/fork) <div> </div> </div> </div> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">RelativeLayout</span> <span class="attribute" style="color: red;">xmlns:android</span>=<span class="attribute-value" style="color: blue;">&#8220;http://schemas.android.com/apk/res/android&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">&#8220;match_parent&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">&#8220;match_parent&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">android.support.v4.widget.SwipeRefreshLayout</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:id</span>=<span class="attribute-value" style="color: blue;">&#8220;@+id/id_swipe_ly&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">&#8220;match_parent&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">&#8220;match_parent&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">ListView</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:id</span>=<span class="attribute-value" style="color: blue;">&#8220;@+id/id_listview&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">&#8220;match_parent&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">&#8220;match_parent&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"></</span><span class="tag-name" style="font-weight: bold; color: #993300;">ListView</span><span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"></</span><span class="tag-name" style="font-weight: bold; color: #993300;">android.support.v4.widget.SwipeRefreshLayout</span><span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"></</span><span class="tag-name" style="font-weight: bold; color: #993300;">RelativeLayout</span><span class="tag" style="font-weight: bold; color: #993300;">></span> </span> 2、MainActivty:&nbsp; &nbsp; **[java]** [view plain](http://blog.csdn.net/lmj623565791/article/details/24521483#)[copy](http://blog.csdn.net/lmj623565791/article/details/24521483#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/313476)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/313476/fork) <div> </div> </div> </div> - <span style="color: black;"><span class="comment" style="color: #008200;">/*</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;"> * Created by Storm Zhang, Mar 31, 2014.</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.zhy.swiperefreshlayoutdemo; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.ArrayList; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.Arrays; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.List; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.annotation.SuppressLint; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.app.Activity; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.os.Bundle; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.os.Handler; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.support.v4.widget.SwipeRefreshLayout; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.util.Log; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.ArrayAdapter; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.ListView; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> MainActivity <span class="keyword" style="font-weight: bold; color: #006699;">extends</span> Activity <span class="keyword" style="font-weight: bold; color: #006699;">implements</span> SwipeRefreshLayout.OnRefreshListener </span> - <span style="color: black;">{ </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> <span class="keyword" style="font-weight: bold; color: #006699;">static</span> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> REFRESH_COMPLETE = <span class="number" style="color: #c00000;">0X110</span>; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> SwipeRefreshLayout mSwipeLayout; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> ListView mListView; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> ArrayAdapter<String> mAdapter; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> List<String> mDatas = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ArrayList<String>(Arrays.asList(<span class="string" style="color: blue;">&#8220;Java&#8221;</span>, <span class="string" style="color: blue;">&#8220;Javascript&#8221;</span>, <span class="string" style="color: blue;">&#8220;C++&#8221;</span>, <span class="string" style="color: blue;">&#8220;Ruby&#8221;</span>, <span class="string" style="color: blue;">&#8220;Json&#8221;</span>, </span> - <span style="color: black;"> <span class="string" style="color: blue;">&#8220;HTML&#8221;</span>)); </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> Handler mHandler = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Handler() </span> - <span style="color: black;"> { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> handleMessage(android.os.Message msg) </span> - <span style="color: black;"> { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">switch</span> (msg.what) </span> - <span style="color: black;"> { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">case</span> REFRESH_COMPLETE: </span> - <span style="color: black;"> mDatas.addAll(Arrays.asList(<span class="string" style="color: blue;">&#8220;Lucene&#8221;</span>, <span class="string" style="color: blue;">&#8220;Canvas&#8221;</span>, <span class="string" style="color: blue;">&#8220;Bitmap&#8221;</span>)); </span> - <span style="color: black;"> mAdapter.notifyDataSetChanged(); </span> - <span style="color: black;"> mSwipeLayout.setRefreshing(<span class="keyword" style="font-weight: bold; color: #006699;">false</span>); </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">break</span>; </span> - <span style="color: black;"> </span> - <span style="color: black;"> } </span> - <span style="color: black;"> }; </span> - <span style="color: black;"> }; </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="annotation" style="color: #646464;">@SuppressLint</span>(<span class="string" style="color: blue;">&#8220;InlinedApi&#8221;</span>) </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">protected</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onCreate(Bundle savedInstanceState) </span> - <span style="color: black;"> { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">super</span>.onCreate(savedInstanceState); </span> - <span style="color: black;"> setContentView(R.layout.activity_main); </span> - <span style="color: black;"> </span> - <span style="color: black;"> mListView = (ListView) findViewById(R.id.id_listview); </span> - <span style="color: black;"> mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.id_swipe_ly); </span> - <span style="color: black;"> </span> - <span style="color: black;"> mSwipeLayout.setOnRefreshListener(<span class="keyword" style="font-weight: bold; color: #006699;">this</span>); </span> - <span style="color: black;"> mSwipeLayout.setColorScheme(android.R.color.holo_blue_bright, android.R.color.holo_green_light, </span> - <span style="color: black;"> android.R.color.holo_orange_light, android.R.color.holo_red_light); </span> - <span style="color: black;"> mAdapter = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ArrayAdapter<String>(<span class="keyword" style="font-weight: bold; color: #006699;">this</span>, android.R.layout.simple_list_item_1, mDatas); </span> - <span style="color: black;"> mListView.setAdapter(mAdapter); </span> - <span style="color: black;"> </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onRefresh() </span> - <span style="color: black;"> { </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// Log.e(&#8220;xxx&#8221;, Thread.currentThread().getName());</span> </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// UI Thread</span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, <span class="number" style="color: #c00000;">2000</span>); </span> - <span style="color: black;"> </span> - <span style="color: black;"> } </span> - <span style="color: black;">} </span> 好了,结束,我感觉效果挺好看的,不妨试试。&nbsp; 效果图: ![](http://img.blog.csdn.net/20140426144728031) &nbsp; &nbsp; ok ~ &nbsp; [源码点击此处下载](http://download.csdn.net/detail/lmj623565791/7256271) 转载:http://blog.csdn.net/lmj623565791/article/details/24521483 3 踩

2014年8月5日 · 5 分钟 · 天边的星星

wordpress做api接口

我在想在wordpress中如何写一个api接口,请求这个网址,可以获取最新文章列表,一般通常的做法是新建一个php文件,接收几个参数,查询数据库,用json格式返回数据就行了,当然wordpress也可以这样弄,wordpress插件很强大,有没有这样的插件呢,上网找了一下,果然有。 一款叫JSON API的wordpress插件正是我要的功能,并且更全面,它可以返回最新文章,类别,作者,文章详情,就是在wordpress中几乎所有的内容都可以通过它来获取json格式的数据,它甚至可以通过传递json数据实现文章评论、用户注册。 有了这样一款插件,关键是有了这样一个api接口,可以不用费劲自己写api了,但是可以用来做什么呢? 比如我想做个微信公共帐号,用户输入1,返回最新文章列表,根据用户输入返回不同的内容,这就要请求api地址返回json格式的数据。 插件安装地址:http://wordpress.org/plugins/json-api/ 安装好后,使用方法如下(本文只介绍几个常见的,其他的请参加文档): 隐式调用: http://www.example.org/?json=1(返回该站全部json格式数据) http://www.example.org/?p=47&json=1(返回文章id为47的json数据) http://www.example.org/tag/banana/?json=1(返回标签是banana的json数据) 显示调用: http://www.example.org/?json=get_recent_posts(返回最新文章json数据,默认返回很多字段,可以指定) http://www.example.org/?json=get_post&post_id=47(返回id为47的文章json数据) http://www.example.org/?json=get_tag_posts&tag_slug=banana(返回tag标签是banana的json数据) 链接友好型调用: http://www.example.org/api/get_recent_posts/ http://www.example.org/api/get_post/?post_id=47 http://www.example.org/api/get_tag_posts/?tag_slug=banana API返回的json数据如下: 可以看到,返回的内容太多了,也许我们只要最新列表中的标题和链接就够了。 http://www.example.org/api/get_recent_posts/?callback=show_posts_widget&read_more=More&count=3 有很多参数可以选,比如count为返回的文章数目,参考官方文档吧。 (本文为小谈博客原创,转载请注明出处!) 本文链接:http://www.tantengvip.com/2013/12/wordpress-api/

2014年5月23日 · 1 分钟 · 天边的星星

安卓图片OCR识别技术 tesseract研究文档

针对安卓APP的 OCR图片识别技术研究与 DEMO: 鉴于大家都给我发私信要源码:现在更新源码 在下载(由于最近CSDN下载分不够了。。所以要了10分 还希望大家理解哦) http://download.csdn.net/detail/wei2253498/7146411 通过近端时间的在网络上的学习,了解了俩个OCR的技术,包括tesseract 和 openCv这俩个技术 主要研究了tesseract的OCR技术,并通过模拟器做了个demo app下面与大家分享过程,希望共同进步。 Tesseract OCR引擎是1995年UNLVAccuracy大赛中的排名前三的引擎。1995年到2006年间,它没有大的改进;之后,它被谷歌大幅改进,很可能是识别率最高的可用开源OCR引擎之一了。结合Leptonica图像处理库,它能读取各种各样格式的图像文件,识别出超过40多种语言的文本。 Tesseract的下载地址为: http://code.google.com/p/tesseract-ocr/downloads/list Tesseract for android 的 tess-two下载地址为: https://github.com/rmtheis/tess-two/archive/master.zip 接下来需要对下载下来的tess-two进行编译 如何用android ndk进行so的编译我放在了另外的一个文档中,大家请参考 也可以直接下载编译好的tess-two so文件 http://download.csdn.net/detail/uniquerhythm/5166651 编译好后,将src下的两个包以及libs导入到自己的项目就可以用啦 接下来我们还需要 tessract的android jar包 Android官方地址:tesseract-android-tools http://code.google.com/p/tesseract-android-tools/downloads/list?can=1&q= 但它必须要一个匹配库,即tessdata,我们可以从官方拷贝,在前面git的项目里面tesseract源码目录有现成的tessdata可以用,对于中文,googlecode上也有下载,当然也可以自己训练不同语言的tessdata。 包leptonica的类我们不必使用,只要使用tess包的类就行了 下面是 tessBaseAPI的主要用法 TessBaseAPI **[java]** [view plain](http://blog.csdn.net/wei2253498/article/details/8748741#)[copy](http://blog.csdn.net/wei2253498/article/details/8748741#)[print](http://blog.csdn.net/wei2253498/article/details/8748741#)[?](http://blog.csdn.net/wei2253498/article/details/8748741#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/274921)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/274921/fork) <div> </div> </div> - <span style="color: black;"><span class="comment" style="color: #008200;">//////////////////////华丽的分割线//////////////////////////////////////////////////////</span> </span> - <span style="color: black;"> </span> - <span style="color: black;">TessBaseAPI baseApi=<span class="keyword" style="font-weight: bold; color: #006699;">new</span> TessBaseAPI(); </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//初始化tess</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//android下面,tessdata肯定得放到sd卡里了</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//如果tessdata这个目录放在sd卡的根目录</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//那么path直接传入sd卡的目录</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//eng就是英文,关于语言,按ISO 639-3标准的代码就行,具体请移步wiki</span> </span> - <span style="color: black;">baseApi.init(<span class="string" style="color: blue;">&#8220;tessdata文件夹的父级目录&#8221;</span>,<span class="string" style="color: blue;">&#8220;eng&#8221;</span>); </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//options是为了缩放图片,这个酌情缩放,图片小的话可以不缩放</span> </span> - <span style="color: black;">BitmapFactory.Options options=newBitmapFactory.Options(); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//缩小为原来的1/2</span> </span> - <span style="color: black;">options.inSampleSize=<span class="number" style="color: #c00000;">2</span>; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//bitmap,我这里是以流的形式,只要能形成Bitmap就行</span> </span> - <span style="color: black;">Bitmap bitmap = BitmapFactory.decodeStream(instream,<span class="keyword" style="font-weight: bold; color: #006699;">null</span>,options); </span> - <span style="color: black;"> instream.close(); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//设置要ocr的图片bitmap</span> </span> - <span style="color: black;">baseApi.setImage(bitmap); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//根据Init的语言,获得ocr后的字符串</span> </span> - <span style="color: black;">String text= baseApi.getUTF8Text(); </span> ...

2014年5月9日 · 2 分钟 · 天边的星星