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

网友投稿 268 2023-05-16


基于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>() {

@Override

public void accept(Response

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>() {

@Override

public void accept(Response

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>() {

@Override public void accept(@NonNull Response 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);//解除绑定

}

}

源码下载


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中sleep()与wait()的区别总结
下一篇:微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~