Method onCreateDialog
(Fig. 7.35) inflates the custom View
(lines 32–34) defined by fragment_color.xml
containing the GUI for selecting a color, then attaches that View
to the AlertDialog
by calling AlertDialog.Builder
’s setView
method (line 35). Lines 42–50 get references to the dialog’s SeekBar
s and colorView
. Next, lines 53–56 register colorChangedListener
(Fig. 7.38) as the listener for the SeekBar
s’ events.
26 // create an AlertDialog and return it
27 @Override
28 public Dialog onCreateDialog(Bundle bundle)
29 {
30 AlertDialog.Builder builder =
31 new AlertDialog.Builder(getActivity());
32 View colorDialogView =
33 getActivity().getLayoutInflater().inflate(
34 R.layout.fragment_color, null);
35 builder.setView(colorDialogView); // add GUI to dialog
36
37 // set the AlertDialog's message
38 builder.setTitle(R.string.title_color_dialog);
39 builder.setCancelable(true);
40
41 // get the color SeekBars and set their onChange listeners
42 alphaSeekBar = (SeekBar) colorDialogView.findViewById(
43 R.id.alphaSeekBar);
44 redSeekBar = (SeekBar) colorDialogView.findViewById(
45 R.id.redSeekBar);
46 greenSeekBar = (SeekBar) colorDialogView.findViewById(
47 R.id.greenSeekBar);
48 blueSeekBar = (SeekBar) colorDialogView.findViewById(
49 R.id.blueSeekBar);
50 colorView = colorDialogView.findViewById(R.id.colorView );
51
52 // register SeekBar event listeners
53 alphaSeekBar.setOnSeekBarChangeListener(colorChangedListener);
54 redSeekBar.setOnSeekBarChangeListener(colorChangedListener);
55 greenSeekBar.setOnSeekBarChangeListener(colorChangedListener);
56 blueSeekBar.setOnSeekBarChangeListener(colorChangedListener);
57
58 // use current drawing color to set SeekBar values
59 final DoodleView doodleView = getDoodleFragment().getDoodleView();
60 color = doodleView.getDrawingColor();
61 alphaSeekBar.setProgress(Color.alpha(color));
62 redSeekBar.setProgress(Color.red(color));
63 greenSeekBar.setProgress(Color.green(color));
64 blueSeekBar.setProgress(Color.blue(color));
65
66 // add Set Color Button
67 builder.setPositiveButton(R.string.button_set_color,
68 new DialogInterface.OnClickListener()
69 {
70 public void onClick(DialogInterface dialog, int id)
71 {
72 doodleView.setDrawingColor(color);
73 }
74 }
75 ); // end call to setPositiveButton
76
77 return builder.create(); // return dialog
78 } // end method onCreateDialog
79
Line 59 calls method getDoodleFragment
(Fig. 7.36) to get a reference to the DoodleFragment
, then calls the DoodleFragment
’s getDoodleView
method to get the DoodleView
. Lines 60–64 get the DoodleView
’s current drawing color, then use it to set each SeekBar
’s value. Color
’s static
methods alpha, red, green and blue extract the ARGB values from the color, and SeekBar
’s setProgress
method positions the thumbs. Lines 67–75 configure the AlertDialog
’s positive button to set the DoodleView
’s new drawing color. Line 77 returns the AlertDialog
.
80 // gets a reference to the DoodleFragment
81 private DoodleFragment getDoodleFragment()
82 {
83 return (DoodleFragment) getFragmentManager().findFragmentById(
84 R.id.doodleFragment );
85 }
86