首页 > 编程 > Java > 正文

基于RxPaparazzo实现图片裁剪、图片旋转、比例放大缩小功能

2019-11-26 12:19:05
字体:
来源:转载
供稿:网友

前言:基于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);//解除绑定 }}

源码下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表