图片裁剪(基于RxPaparazzo)

图片裁剪(基于RxPaparazzo)

 

前言:基于RxPaparazzo的图片裁剪,图片旋转、比例放大|缩小。

 

效果:

 

开发环境:AndroidStudio2.2.1+gradle-2.14.1

 

 

涉及知识:

1.Material Design(CardView+CoordinatorLayout+AppBarLayout+NestedScrollView+CollapsingToolbarLayout+Toolbar+FloatingActionButton)使用
 
2.butterknife注解式开发
 
3.基于RxJava+RxAndroid的RxPaparazzo使用

 

引入依赖:

 

 compile 'com.android.support:appcompat-v7:24.+'
    //RxPaparazzo 拍照&相册
//    compile "com.github.miguelbcr:RxPaparazzo:0.4.2-2.x"
    compile ("com.github.miguelbcr:RxPaparazzo:0.5.2-2.x") {
        exclude module: 'okhttp'
        exclude module: 'okio'
    }
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.android.support:cardview-v7:24.+'
//    compile 'com.android.support:customtabs:24.+'
    compile 'com.android.support:design:24.+'
    compile 'com.jakewharton:butterknife:7.0.1'

 

 

部分代码:

public class MainActivity extends AppCompatActivity {

    @Bind(R.id.iv_appbar)
    ImageView iv_appbar;

    @Bind(R.id.main_toolbar)
    Toolbar toolbar;

 /*   @Bind(R.id.btn_float)
    FloatingActionButton btn_float;*/

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initToolBar();
    }

    private void initToolBar() {
        this.setSupportActionBar(toolbar);
        toolbar.setTitle("我的");
    }

    @OnClick({R.id.main_toolbar, R.id.btn_float})
    public void onClick(View view) {
        final UCrop.Options options = new UCrop.Options();
        int color = ContextCompat.getColor(view.getContext(), R.color.colorPrimary);
        options.setToolbarColor(color);
        options.setStatusBarColor(ContextCompat.getColor(view.getContext(), R.color.colorPrimaryDark));
        options.setActiveWidgetColor(color);
        switch (view.getId()) {
            case R.id.main_toolbar:
                Toast.makeText(MainActivity.this, "Toolbar点击", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_float: {
                showDialog(view, options);
                break;
            }
        }
    }

    private void showDialog(View view, final UCrop.Options options) {
        final Context context = view.getContext();
        final AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("设置背景图片:").setMessage("如何获取图片?")
                .setPositiveButton("相册", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
//                        RxPaparazzo.takeImage(MainActivity.this)
                        RxPaparazzo.single(MainActivity.this)
                                .crop(options)
                                .usingGallery()
                                .subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread())
                                .subscribe(new Consumer<Response<MainActivity, FileData>>() {
                                    @Override
                                    public void accept(Response<MainActivity, FileData>
                                                               response) throws Exception {
                                        if (response.resultCode() == Activity.RESULT_OK) {

                                            File filePath = response.data().getFile();
                                            Bitmap bitmap = BitmapFactory.
                                                    decodeFile(filePath.getPath());
                                            iv_appbar.setImageBitmap(bitmap);

                                        } else if (response.resultCode() == Activity.RESULT_CANCELED) {

                                            Toast.makeText(MainActivity.this, "取消相册访问",
                                                    Toast.LENGTH_SHORT).show();

                                        } else {

                                            Toast.makeText(MainActivity.this, "未知错误!",
                                                    Toast.LENGTH_SHORT).show();
                                        }
                                    }
                                });
                    }
                })
                .setNeutralButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .setNegativeButton("拍照", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
//                        RxPaparazzo.takeImage(MainActivity.this)
                        RxPaparazzo.single(MainActivity.this)
                                .crop(options)
                                .usingCamera()
                                .subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread())
                                .subscribe(new Consumer<Response<MainActivity, FileData>>() {
                                    @Override
                                    public void accept(Response<MainActivity, FileData>
                                                               response) throws Exception {

                                        if (response.resultCode() == Activity.RESULT_OK) {
                                            FileData filePath = response.data();
                                            Bitmap bitmap = BitmapFactory.
                                                    decodeFile(filePath.getFile().getPath());
                                            iv_appbar.setImageBitmap(bitmap);
                                        } else if (response.resultCode() == Activity.RESULT_CANCELED) {
                                            Toast.makeText(MainActivity.this, "取消拍照",
                                                    Toast.LENGTH_SHORT).show();
                                        } else {
                                            Toast.makeText(MainActivity.this, "未知错误!",
                                                    Toast.LENGTH_SHORT).show();
                                        }
                                    }
                                });
                        /**
                         * new Consumer<Response<MainActivity, String>>() {
                        @Override public void accept(@NonNull Response<MainActivity, String> response) throws Exception {
                        if (response.resultCode() == Activity.RESULT_OK) {
                        String filePath = response.data();
                        Bitmap bitmap = BitmapFactory.decodeFile(filePath);
                        iv_appbar.setImageBitmap(bitmap);
                        } else if (response.resultCode() == Activity.RESULT_CANCELED) {
                        Toast.makeText(MainActivity.this, "取消拍照", Toast.LENGTH_SHORT).show();
                        } else {
                        Toast.makeText(MainActivity.this, "未知错误!", Toast.LENGTH_SHORT).show();
                        }
                        }
                        }
                         *
                         */
                    }
                });

        AlertDialog dialog = builder.create();
        dialog.show();

        dialog.getButton(DialogInterface.BUTTON_POSITIVE).

                setTextColor(ContextCompat.getColor(context, R.color.colorPrimary)
                );
        dialog.getButton(DialogInterface.BUTTON_NEGATIVE).

                setTextColor(ContextCompat.getColor(context, R.color.colorPrimary)

                );
        dialog.getButton(DialogInterface.BUTTON_NEUTRAL).

                setTextColor(ContextCompat.getColor(context, R.color.colorAccent)

                );
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ButterKnife.unbind(this);//解除绑定
    }
}

源码下载...

 

原文地址:https://www.cnblogs.com/xxdh/p/6840634.html