扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这期内容当中小编将会给大家带来有关Android中怎么自定义对话框,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了屏山免费建站欢迎大家使用!
Android自带的 AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog 可以用于简单的对话框显示。当还是有这些对话框不能满足应用需要的时候,这时就可以使用一些自定义的对话框。有多种方法可以实现自定义对话框。一是使用 Activity作为Dialog,可以通过设置Activity显示Dialog风格,使得该Activity在外观上和Dialog一致:显示在其它 Activity前面且半透明。
本例采用另外两种方法来使用自定义对话框,将用这个对话框来最为图形变换(Transform)的选项:
Primitive: Rectange, Ellipse,Text
Pen: Thin,Thick,Dashed
Brush: Solid, Gradient,Texture
Transform: Identity, Rotate, Scale, Shear
Rendering: Stroke, Fill, Stoke and Fill
首先在res\layout 下新建transformoption.xml 作为自定义对话框布局:
一种方法是重新定制AlertDialog ,基本步骤和Android简明开发教程十七:Dialog 显示图像类似,但是在protected Dialog onCreateDialog(int id) ,需要重新设定Dialog的Content View并给RadioButton添加事件处理:
1 protected Dialog onCreateDialog(int id) { 2 final Dialog dialog; 3 switch (id) { 4 case OPTION_DIALOG: 5 LayoutInflater li 6 = LayoutInflater.from(this); 7 View optionView 8 = li.inflate(R.layout.transformoption, null); 9 AlertDialog.Builder optionDialog 10 = new AlertDialog.Builder(this); 11 optionDialog.setTitle("Options"); 12 optionDialog.setView(optionView); 13 dialog = optionDialog.create(); 14 RadioButton button = (RadioButton) optionView 15 .findViewById(R.id.radioRectangle); 16 button.setOnClickListener(new Button.OnClickListener() { 17 18 public void onClick(View v) { 19 primitiveIndex = PRIMITIVE_RECTANGLE; 20 drawImage(); 21 dialog.dismiss(); 22 23 } 24 }); 25 26 ... 27 28 button = (RadioButton) optionView 29 .findViewById(R.id.radioStrokeFill); 30 button.setOnClickListener(new Button.OnClickListener() { 31 32 public void onClick(View v) { 33 renderingIndex = RENDERING_STROKE_AND_FILL; 34 drawImage(); 35 dialog.dismiss(); 36 37 } 38 }); 39 return dialog; 40 } 41 42 return null; 43 44 }
第二种是通过派生Dialog ,定义了一个OptionDialog类作为Dialog子类。
1 class OptionDialog extends Dialog { 2 3 public OptionDialog(Context context) { 4 super(context); 5 // TODO Auto-generated constructor stub 6 } 7 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.transformoption); 11 setTitle("Options"); 12 RadioButton button 13 = (RadioButton) findViewById(R.id.radioRectangle); 14 button.setOnClickListener(new Button.OnClickListener() { 15 16 public void onClick(View v) { 17 primitiveIndex = PRIMITIVE_RECTANGLE; 18 drawImage(); 19 dismiss(); 20 21 } 22 }); 23 ... 24 button = (RadioButton) findViewById(R.id.radioStrokeFill); 25 button.setOnClickListener(new Button.OnClickListener() { 26 27 public void onClick(View v) { 28 renderingIndex = RENDERING_STROKE_AND_FILL; 29 drawImage(); 30 dismiss(); 31 32 } 33 }); 34 } 35 36 }
这两种方法在显示Dialog时有所不同:
1 private OptionDialog optionDialog; 2 static final private int OPTION_DIALOG = 1; 3 4 ... 5 optionDialog = new OptionDialog(this); 6 7 ... 8 @Override 9 public void onClick(View view) { 10 // optionDialog.show(); 11 showDialog(OPTION_DIALOG); 12 13 }
下面是完整代码:
1 public class Transform extends Graphics2DActivity 2 implements OnClickListener { 3 4 static int PRIMITIVE_RECTANGLE = 0; 5 static int PRIMITIVE_ELLIPSE = 1; 6 static int PRIMITIVE_TEXT = 2; 7 static int PEN_THIN = 0; 8 static int PEN_THICK = 1; 9 static int PEN_DASHED = 2; 10 static int BRUSH_SOLID = 0; 11 static int BRUSH_GRADIENT = 1; 12 static int BRUSH_TEXTURE = 2; 13 static int TRANSFORM_IDENTITY = 0; 14 static int TRANSFORM_ROTATE = 1; 15 static int TRANSFORM_SCALE = 2; 16 static int TRANSFORM_SHEAR = 3; 17 static int RENDERING_STROKE = 0; 18 static int RENDERING_FILL = 1; 19 static int RENDERING_STROKE_AND_FILL = 2; 20 int primitiveIndex; 21 int penIndex; 22 int brushIndex; 23 int transformIndex; 24 int renderingIndex; 25 int[] rgbData; 26 int bitmapWidth; 27 int bitmapHeight; 28 29 class OptionDialog extends Dialog { 30 31 public OptionDialog(Context context) { 32 super(context); 33 // TODO Auto-generated constructor stub 34 } 35 36 protected void onCreate(Bundle savedInstanceState) { 37 super.onCreate(savedInstanceState); 38 setContentView(R.layout.transformoption); 39 setTitle("Options"); 40 RadioButton button 41 = (RadioButton) findViewById(R.id.radioRectangle); 42 button.setOnClickListener(new Button.OnClickListener() { 43 44 public void onClick(View v) { 45 primitiveIndex = PRIMITIVE_RECTANGLE; 46 drawImage(); 47 dismiss(); 48 49 } 50 }); 51 button = (RadioButton) findViewById(R.id.radioEllipse); 52 button.setOnClickListener(new Button.OnClickListener() { 53 54 public void onClick(View v) { 55 primitiveIndex = PRIMITIVE_ELLIPSE; 56 drawImage(); 57 dismiss(); 58 59 } 60 }); 61 button = (RadioButton) findViewById(R.id.radioText); 62 button.setOnClickListener(new Button.OnClickListener() { 63 64 public void onClick(View v) { 65 primitiveIndex = PRIMITIVE_TEXT; 66 drawImage(); 67 dismiss(); 68 69 } 70 }); 71 72 button = (RadioButton) findViewById(R.id.radioThin); 73 button.setOnClickListener(new Button.OnClickListener() { 74 75 public void onClick(View v) { 76 penIndex = PEN_THIN; 77 drawImage(); 78 dismiss(); 79 80 } 81 }); 82 83 button = (RadioButton) findViewById(R.id.radioThick); 84 button.setOnClickListener(new Button.OnClickListener() { 85 86 public void onClick(View v) { 87 penIndex = PEN_THICK; 88 drawImage(); 89 dismiss(); 90 91 } 92 }); 93 94 button = (RadioButton) findViewById(R.id.radioDashed); 95 button.setOnClickListener(new Button.OnClickListener() { 96 97 public void onClick(View v) { 98 penIndex = PEN_DASHED; 99 drawImage(); 100 dismiss(); 101 102 } 103 }); 104 105 button = (RadioButton) findViewById(R.id.radioSolid); 106 button.setOnClickListener(new Button.OnClickListener() { 107 108 public void onClick(View v) { 109 brushIndex = BRUSH_SOLID; 110 drawImage(); 111 dismiss(); 112 113 } 114 }); 115 116 button = (RadioButton) findViewById(R.id.radioGradient); 117 button.setOnClickListener(new Button.OnClickListener() { 118 119 public void onClick(View v) { 120 brushIndex = BRUSH_GRADIENT; 121 drawImage(); 122 dismiss(); 123 124 } 125 }); 126 127 button = (RadioButton) findViewById(R.id.radioTexture); 128 button.setOnClickListener(new Button.OnClickListener() { 129 130 public void onClick(View v) { 131 brushIndex = BRUSH_TEXTURE; 132 drawImage(); 133 dismiss(); 134 135 } 136 }); 137 138 button = (RadioButton) findViewById(R.id.radioIdentity); 139 button.setOnClickListener(new Button.OnClickListener() { 140 141 public void onClick(View v) { 142 transformIndex = TRANSFORM_IDENTITY; 143 drawImage(); 144 dismiss(); 145 146 } 147 }); 148 149 button = (RadioButton) findViewById(R.id.radioRotate); 150 button.setOnClickListener(new Button.OnClickListener() { 151 152 public void onClick(View v) { 153 transformIndex = TRANSFORM_ROTATE; 154 drawImage(); 155 dismiss(); 156 157 } 158 }); 159 160 button = (RadioButton) findViewById(R.id.radioScale); 161 button.setOnClickListener(new Button.OnClickListener() { 162 163 public void onClick(View v) { 164 transformIndex = TRANSFORM_SCALE; 165 drawImage(); 166 dismiss(); 167 168 } 169 }); 170 171 button = (RadioButton) findViewById(R.id.radioShear); 172 button.setOnClickListener(new Button.OnClickListener() { 173 174 public void onClick(View v) { 175 transformIndex = TRANSFORM_SHEAR; 176 drawImage(); 177 dismiss(); 178 179 } 180 }); 181 182 button = (RadioButton) findViewById(R.id.radioStroke); 183 button.setOnClickListener(new Button.OnClickListener() { 184 185 public void onClick(View v) { 186 renderingIndex = RENDERING_STROKE; 187 drawImage(); 188 dismiss(); 189 190 } 191 }); 192 193 button = (RadioButton) findViewById(R.id.radioFill); 194 button.setOnClickListener(new Button.OnClickListener() { 195 196 public void onClick(View v) { 197 renderingIndex = RENDERING_FILL; 198 drawImage(); 199 dismiss(); 200 201 } 202 }); 203 204 button = (RadioButton) findViewById(R.id.radioStrokeFill); 205 button.setOnClickListener(new Button.OnClickListener() { 206 207 public void onClick(View v) { 208 renderingIndex = RENDERING_STROKE_AND_FILL; 209 drawImage(); 210 dismiss(); 211 212 } 213 }); 214 } 215 216 } 217 218 private OptionDialog optionDialog; 219 private Button btnOptions; 220 221 static final private int OPTION_DIALOG = 1; 222 223 private AffineTransform at = new AffineTransform(); 224 private int w, h; 225 private IShape shapes[] = new IShape[3]; 226 227 private boolean firstTime = true; 228 private FontEx font = FontEx.getSystemFont(); 229 230 @Override 231 protected void drawImage() { 232 drawTransform(); 233 234 } 235 236 protected Dialog onCreateDialog(int id) { 237 final Dialog dialog; 238 switch (id) { 239 case OPTION_DIALOG: 240 LayoutInflater li 241 = LayoutInflater.from(this); 242 View optionView 243 = li.inflate(R.layout.transformoption, null); 244 AlertDialog.Builder optionDialog 245 = new AlertDialog.Builder(this); 246 optionDialog.setTitle("Options"); 247 optionDialog.setView(optionView); 248 dialog = optionDialog.create(); 249 RadioButton button = (RadioButton) optionView 250 .findViewById(R.id.radioRectangle); 251 button.setOnClickListener(new Button.OnClickListener() { 252 253 public void onClick(View v) { 254 primitiveIndex = PRIMITIVE_RECTANGLE; 255 drawImage(); 256 dialog.dismiss(); 257 258 } 259 }); 260 button = (RadioButton) 261 optionView.findViewById(R.id.radioEllipse); 262 button.setOnClickListener(new Button.OnClickListener() { 263 264 public void onClick(View v) { 265 primitiveIndex = PRIMITIVE_ELLIPSE; 266 drawImage(); 267 dialog.dismiss(); 268 269 } 270 }); 271 button = (RadioButton) 272 optionView.findViewById(R.id.radioText); 273 button.setOnClickListener(new Button.OnClickListener() { 274 275 public void onClick(View v) { 276 primitiveIndex = PRIMITIVE_TEXT; 277 drawImage(); 278 dialog.dismiss(); 279 280 } 281 }); 282 283 button = (RadioButton) 284 optionView.findViewById(R.id.radioThin); 285 button.setOnClickListener(new Button.OnClickListener() { 286 287 public void onClick(View v) { 288 penIndex = PEN_THIN; 289 drawImage(); 290 dialog.dismiss(); 291 292 } 293 }); 294 295 button = (RadioButton) 296 optionView.findViewById(R.id.radioThick); 297 button.setOnClickListener(new Button.OnClickListener() { 298 299 public void onClick(View v) { 300 penIndex = PEN_THICK; 301 drawImage(); 302 dialog.dismiss(); 303 304 } 305 }); 306 307 button = (RadioButton) 308 optionView.findViewById(R.id.radioDashed); 309 button.setOnClickListener(new Button.OnClickListener() { 310 311 public void onClick(View v) { 312 penIndex = PEN_DASHED; 313 drawImage(); 314 dialog.dismiss(); 315 316 } 317 }); 318 319 button = (RadioButton) 320 optionView.findViewById(R.id.radioSolid); 321 button.setOnClickListener(new Button.OnClickListener() { 322 323 public void onClick(View v) { 324 brushIndex = BRUSH_SOLID; 325 drawImage(); 326 dialog.dismiss(); 327 328 } 329 }); 330 331 button = (RadioButton) 332 optionView.findViewById(R.id.radioGradient); 333 button.setOnClickListener(new Button.OnClickListener() { 334 335 public void onClick(View v) { 336 brushIndex = BRUSH_GRADIENT; 337 drawImage(); 338 dialog.dismiss(); 339 340 } 341 }); 342 343 button = (RadioButton) 344 optionView.findViewById(R.id.radioTexture); 345 button.setOnClickListener(new Button.OnClickListener() { 346 347 public void onClick(View v) { 348 brushIndex = BRUSH_TEXTURE; 349 drawImage(); 350 dialog.dismiss(); 351 352 } 353 }); 354 355 button = (RadioButton) 356 optionView.findViewById(R.id.radioIdentity); 357 button.setOnClickListener(new Button.OnClickListener() { 358 359 public void onClick(View v) { 360 transformIndex = TRANSFORM_IDENTITY; 361 drawImage(); 362 dialog.dismiss(); 363 364 } 365 }); 366 367 button = (RadioButton) 368 optionView.findViewById(R.id.radioRotate); 369 button.setOnClickListener(new Button.OnClickListener() { 370 371 public void onClick(View v) { 372 transformIndex = TRANSFORM_ROTATE; 373 drawImage(); 374 dialog.dismiss(); 375 376 } 377 }); 378 379 button = (RadioButton) 380 optionView.findViewById(R.id.radioScale); 381 button.setOnClickListener(new Button.OnClickListener() { 382 383 public void onClick(View v) { 384 transformIndex = TRANSFORM_SCALE; 385 drawImage(); 386 dialog.dismiss(); 387 388 } 389 }); 390 391 button = (RadioButton) 392 optionView.findViewById(R.id.radioShear); 393 button.setOnClickListener(new Button.OnClickListener() { 394 395 public void onClick(View v) { 396 transformIndex = TRANSFORM_SHEAR; 397 drawImage(); 398 dialog.dismiss(); 399 400 } 401 }); 402 403 button = (RadioButton) 404 optionView.findViewById(R.id.radioStroke); 405 button.setOnClickListener(new Button.OnClickListener() { 406 407 public void onClick(View v) { 408 renderingIndex = RENDERING_STROKE; 409 drawImage(); 410 dialog.dismiss(); 411 412 } 413 }); 414 415 button = (RadioButton) 416 optionView.findViewById(R.id.radioFill); 417 button.setOnClickListener(new Button.OnClickListener() { 418 419 public void onClick(View v) { 420 renderingIndex = RENDERING_FILL; 421 drawImage(); 422 dialog.dismiss(); 423 424 } 425 }); 426 427 button = (RadioButton) optionView 428 .findViewById(R.id.radioStrokeFill); 429 button.setOnClickListener(new Button.OnClickListener() { 430 431 public void onClick(View v) { 432 renderingIndex = RENDERING_STROKE_AND_FILL; 433 drawImage(); 434 dialog.dismiss(); 435 436 } 437 }); 438 return dialog; 439 } 440 441 return null; 442 443 } 444 445 public void onCreate(Bundle savedInstanceState) { 446 super.onCreate(savedInstanceState); 447 setContentView(R.layout.transform); 448 graphic2dView = (GuidebeeGraphics2DView) 449 findViewById(R.id.graphics2dview); 450 btnOptions = (Button) findViewById(R.id.btnOption); 451 btnOptions.setOnClickListener(this); 452 shapes[0] = new Rectangle(0, 0, 100, 100); 453 shapes[1] = new Ellipse(0, 0, 100, 100); 454 IShape[] fontShapes = font.getGlyphArray(96, 455 "TEXT".toCharArray(), 0, 456 4, FontEx.TEXT_DIR_LR); 457 shapes[2] = new Area(fontShapes[0]); 458 for (int i = 1; i < fontShapes.length; i++) { 459 ((Area) shapes[2]).add(new Area(fontShapes[i])); 460 } 461 Bitmap bitmap = BitmapFactory.decodeResource( 462 getResources(), 463 R.drawable.brick); 464 bitmapWidth = bitmap.getWidth(); 465 bitmapHeight = bitmap.getHeight(); 466 467 rgbData = new int[bitmapWidth * bitmapHeight]; 468 bitmap.getPixels(rgbData, 0, bitmapWidth, 0, 0, 469 bitmapWidth, 470 bitmapHeight); 471 w = SharedGraphics2DInstance.CANVAS_WIDTH; 472 h = SharedGraphics2DInstance.CANVAS_HEIGHT; 473 optionDialog = new OptionDialog(this); 474 475 } 476 477 private void setTrans(int transIndex) { 478 // Sets the AffineTransform. 479 switch (transIndex) { 480 case 0: 481 at.setToIdentity(); 482 at.translate(w / 2, h / 2); 483 break; 484 case 1: 485 at.rotate(Math.toRadians(45)); 486 break; 487 case 2: 488 at.scale(0.5, 0.5); 489 break; 490 case 3: 491 at.shear(0.5, 0.0); 492 break; 493 } 494 } 495 496 private void drawTransform() { 497 graphics2D.clear(Color.WHITE); 498 graphics2D.Reset(); 499 setTrans(transformIndex); 500 graphics2D.setAffineTransform(at); 501 502 // Initialize the transform. 503 if (firstTime) { 504 at.setToIdentity(); 505 at.translate(w / 2, h / 2); 506 507 firstTime = false; 508 } 509 510 // Sets the Stroke. 511 Pen pen = null; 512 513 switch (penIndex) { 514 case 0: 515 pen = new Pen(Color.BLACK, 1); 516 break; 517 case 1: 518 pen = new Pen(Color.BLACK, 8); 519 break; 520 case 2: { 521 int dash[] = { 10, 10 }; 522 pen = new Pen(Color.BLACK, 1, Pen.CAP_BUTT, 523 Pen.JOIN_MITER, dash, 0); 524 } 525 break; 526 } 527 528 // Sets the Paint. 529 Brush brush = null; 530 531 switch (brushIndex) { 532 case 0: 533 brush = new SolidBrush(Color.BLUE); 534 break; 535 case 1: { 536 int[] fractions = new int[] { 13, 242 }; 537 Color[] colors = new Color[] { new Color(0xffff6600), 538 new Color(0xffffff66) }; 539 brush = new LinearGradientBrush(50, 50, 150, 540 125, fractions, 541 colors, Brush.REPEAT); 542 } 543 544 break; 545 case 2: 546 try { 547 548 brush = new TextureBrush(rgbData, 549 bitmapWidth, bitmapHeight); 550 } catch (Exception e) { 551 } 552 break; 553 } 554 555 // Sets the Shape. 556 IShape shape = shapes[primitiveIndex]; 557 Rectangle r = shape.getBounds(); 558 AffineTransform toCenterAt = new AffineTransform(); 559 toCenterAt.concatenate(at); 560 toCenterAt.translate(-(r.width / 2), -(r.height / 2)); 561 562 graphics2D.setAffineTransform(toCenterAt); 563 // Sets the rendering method. 564 switch (renderingIndex) { 565 case 0: 566 graphics2D.setDefaultPen(pen); 567 graphics2D.draw(null, shape); 568 break; 569 case 1: 570 graphics2D.setDefaultBrush(brush); 571 graphics2D.fill(null, shape); 572 break; 573 case 2: 574 graphics2D.setPenAndBrush(pen, brush); 575 graphics2D.fill(null, shape); 576 graphics2D.draw(null, shape); 577 break; 578 } 579 graphic2dView.refreshCanvas(); 580 581 } 582 583 @Override 584 public void onClick(View view) { 585 // optionDialog.show(); 586 showDialog(OPTION_DIALOG); 587 588 } 589 }
上述就是小编为大家分享的Android中怎么自定义对话框了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流