Trong ứng dụng, độ lớn nét vẽ được thay đổi thông qua đối tượng paint được khai báo trong lớp MyView chính vì thế để thay đổi được độ lớn nét vẽ , trong lớp MyView ta cần xây dựng một phương thức để thực hiện việc thay đổi này :
public void setMySize(int s) { paint.setStrokeWidth(s); }
Tương tự như chắc năng thay đổi nét vẽ, trên giao diện của ứng dụng ta cũng cần có một nút, khi bấm vào nút này màn hình sẽ hiện thị một dialog trên đó cho phép ta lựa chọn độ lớn của nét vẽ. Chính vì thế ta cần xây dựng một lớp riêng(class
BrushDialog) để hiển thị dialog này. Trên dialog này ta sẽ có một ListView để liệt kê các giá trị phổ biến, bên cạnh đó sẽ có một SeekBar để lựa chọn giá trị tùy ý, một TextView hiển thị giá trị hiện tại đang chọn(hiển thị số) , một ImageButton để chấp nhận giá trị lựa chọn và một ImageView thể hiện hình ảnh nét vẽ khi ta thay đổi giá trị của SeekBar
Khác với chức năng chọn nét vẽ một chút, trong lớp dialog hiển thị độ lớn nét vẽ, ta cần xây dựng một phương thức với một tham số là đối tượng của lớp MyView và một tham số kiểu int. Tham số kiểu MyView được dùng để xác định độ lớn nét vẽ, còn tham số kiểu int dùng để xác định độ lớn nét vẽ hiện tại.
public class BrushDialog { //…
public void chooseBrush(final MyView mv, int p) {
final Dialog da = new Dialog(context); da.setContentView(R.layout.brush_dialog); da.setTitle("Choose size");
//… } // …
}
Trong lớp trên ta cần bắt các sự kiện quan trọng như khi SeekBar thay đổi hoặc khi các Item trên ListView được nhấn vào
public class BrushDialog { //…
public void chooseBrush(final MyView mv, int p) {
final Dialog da = new Dialog(context); da.setContentView(R.layout.brush_dialog); da.setTitle("Choose size");
//…
//Bắt sự kiện onProgressChanged trên đối tượng seekbar OnSeekBarChangeListener seekbarlistener = new
OnSeekBarChangeListener(){
public void onProgressChanged(SeekBar seekbar, int progress, boolean arg2) {
switch(seekbar.getId()){ case R.id.seekBar1:
{
int value = progress+1; text.setText(""+value); px=value; break; } } }; seekbar.setOnSeekBarChangeListener(seekbarlistener); //… } //Bắt sự kiện onItemClick listview.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub if(position == 0){ mv.setMySize(5); da.dismiss(); } // … } }); // … }
Trong lớp BabyPaintActivity ta cũng cần định nghĩa một phương thức để hiển thị dialog này lên :
public void ChooseBrush(View v) {
da_brush.chooseBrush(mview,(int)mview.paint.getStrokeWidth( ));
//da_brush là một đối tượng thuộc lớp BrushDialog }
Phương thức này được gọi khi ta nhấn vào nút tương ứng với chức năng này : <ImageButton
android:id="@+id/bt_choose_shape"
android:layout_height="wrap_content"
android:src="@drawable/icon_pen"
android:onClick="ChooseBrush"/>
Kết quả sau khi ứng dụng hoàn thành :
Hình 12: Dialog chọn độ lớn nét vẽ