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

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

效果:

6bdcbe06c80b6c0223a890947fcb4f0d.gif

开发环境: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);//解除绑定

}

}

源码下载

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值