zoukankan      html  css  js  c++  java
  • 图片裁剪(基于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);//解除绑定
        }
    }

    源码下载...

     

  • 相关阅读:
    Windows如何自定义U盘盘符、文件夹图标、文件夹背景
    BIN文件如何打开
    Windows COM Surrogate 已停止工作怎么办
    EasyBoot使用方法
    SRS Audio Sandbox没有声音怎么办
    [Compose] 20. Principled type conversions with Natural Transformations
    [Compose] 19. Leapfrogging types with Traversable
    [Compose] 17. List comprehensions with Applicative Functors
    [Compose] 15. Applicative Functors for multiple arguments
    [Algorithm] Coding Interview Question and Answer: Longest Consecutive Characters
  • 原文地址:https://www.cnblogs.com/xxdh/p/6840634.html
Copyright © 2011-2022 走看看