这篇博客与上篇http://blog.csdn.net/ethanhola/article/details/50888410组成一个Surfaceview中自由手绘的demo,源码地址:https://github.com/boomstack/MySurfaceView
欢迎follow and fork!

Google推荐使用DialogFragment创建对话框,因为Android系统设计的初衷就是高度组件化,不是我说的,详见api guides第一课:http://developer.android.com/guide/index.html,而fragment本身就是非常灵活的组件,使用fragment是大势所趋。

本博客就在DialogFragment中使用HoloColorpicker这个开源库实现在Dialog中选择颜色并传递给MainActivity,(HoloColorpicker源码地址: https://github.com/LarsWerkman/HoloColorPicker)

首先跟普通fragment一样,先继承自DialogFragment:

public class ColorPickerDialogFragment extends DialogFragment {    ColorPicker picker;//颜色    int pickedColor;    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());        LayoutInflater inflater = getActivity().getLayoutInflater();        View convertView = inflater.inflate(R.layout.layout_fragment_colorpicker, null);        picker = (ColorPicker) convertView.findViewById(R.id.picker);        picker.setOnColorSelectedListener(new ColorPicker.OnColorSelectedListener() {            @Override            public void onColorSelected(int color) {                pickedColor = color;            }        });        builder.setView(convertView).setPositiveButton("OK", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                OnColorChosenListener li = (OnColorChosenListener) getActivity();                if (pickedColor != 0) {                    li.onColorChosen(pickedColor);                }            }        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                dialogDismiss();            }        });        return builder.create();    }    public void dialogDismiss() {        this.dismiss();    }    public interface OnColorChosenListener {        void onColorChosen(int color);    }}

复写了onCreateDialog方法,在里边创建AlertDialog,我们最终要向Activity中传的是选择好的颜色,即pickedColor,可以看到,最后有一个回调接口OnColorChosenListener,在“确定”按钮中调用,在Activity中回调此方法,下面是MainActivity部分代码:

public class MainActivity extends AppCompatActivity implements ColorPickerDialogFragment.OnColorChosenListener {    private MainSurfaceView sv;。。。。。。。。。。 @Override    public void onColorChosen(int pickedColor) {        this.pickedColor = pickedColor;        updateColor();    }    public void updateColor() {        sv.setPaintColor(pickedColor);    }

这样通过回调将Dialog中的pickedColor传入到了MainActivity中去,然后surfaceview实例就可以调用自家的方法了~
这里就可以看到回调的解耦和作用了。

更多相关文章

  1. 【Android】LitePal安装和使用
  2. Android下调用jni时进行的转码操作实例
  3. android canvas 绘制bitmap并保存到本地
  4. Android调用默认浏览器打开指定Url
  5. android-----JNI学习 helloworld
  6. Android(安卓)彩信的发送
  7. android中重要知识点
  8. Android(安卓)高效加载大图片避免OOM
  9. Python 通过脚本获取Android的apk的部分属性,再通过加密算法生成

随机推荐

  1. Android ADB emulator-5554 unauthorized
  2. android:使用webview加载网页
  3. Android左右滑动菜单
  4. android listview 圆角的兑现方案,模仿Iph
  5. 使用Phonegap/Cordova编写跨平台(Android
  6. Android图片上传工具类
  7. android从网上下载图片
  8. Android- Button Transparent
  9. 【转】Android display架构分析
  10. android之ID