2022-02-26 14:34:45
0
效果图如下所示:
该组件有画笔缩放,旋转等功能,可以自定义布局,掉用其接口完成图片编辑的功能。
部分代码:
- public class MainAbility extends Ability {
- private static final int PERMISSION_REQUEST_INTERACTIVE = 1;
- private static final int REQ_CODE_SELECT_IMAGE = 100;
- private static final int REQ_CODE_DOODLE = 101;
- private final static int mDuration = 20000;
- private Text mPath;
- private Image mSaveImg;
- private DataAbilityHelper mHelper;
- private boolean mIsOpenImageSelector = false;
- private final static String mPermmReadMedia = "ohos.permission.READ_MEDIA";
- @Override
- public void onStart(Intent intent) {
- super.onStart(intent);
- setUIContent(ResourceTable.Layout_ability_main);
- requestPermissionsFromUser(new String[]{SystemPermission.READ_USER_STORAGE,
- SystemPermission.WRITE_USER_STORAGE, SystemPermission.READ_MEDIA, SystemPermission.WRITE_MEDIA,
- SystemPermission.MEDIA_LOCATION}, PERMISSION_REQUEST_INTERACTIVE);
- mSaveImg = (Image) findComponentById(ResourceTable.Id_img);
- findComponentById(ResourceTable.Id_btn_select_image).setClickedListener(new Component.ClickedListener() {
- @Override
- public void onClick(Component component) {
- checkPermission();
- }
- });
- findComponentById(ResourceTable.Id_btn_guide).setClickedListener(new Component.ClickedListener() {
- @Override
- public void onClick(Component component) {
- Intent intent = new Intent();
- Operation operation = new Intent.OperationBuilder()
- .withDeviceId("").withBundleName(getBundleName())
- .withAbilityName("com.example.doodledemo.guide.DoodleGuideAbility").build();
- intent.setOperation(operation);
- startAbility(intent);
- }
- });
- findComponentById(ResourceTable.Id_btn_mosaic).setClickedListener(new Component.ClickedListener() {
- @Override
- public void onClick(Component component) {
- Intent intent = new Intent();
- Operation operation = new Intent.OperationBuilder()
- .withDeviceId("").withBundleName(getBundleName())
- .withAbilityName("com.example.doodledemo.MosaicDemo").build();
- intent.setOperation(operation);
- startAbility(intent);
- }
- });
- findComponentById(ResourceTable.Id_btn_scale_gesture).setClickedListener(new Component.ClickedListener() {
- @Override
- public void onClick(Component component) {
- Intent intent = new Intent();
- Operation operation = new Intent.OperationBuilder()
- .withDeviceId("").withBundleName(getBundleName())
- .withAbilityName("com.example.doodledemo.ScaleGestureItemDemoAbility")
- .build();
- intent.setOperation(operation);
- startAbility(intent);
- }
- });
- mPath = (Text) findComponentById(ResourceTable.Id_img_path);
- }
- private void checkPermission() {
- if (verifySelfPermission(mPermmReadMedia) != IBundleManager.PERMISSION_GRANTED) {
- // 应用未被授予权限
- if (canRequestPermission(mPermmReadMedia)) {
- // 是否可以申请弹框授权(首次申请或者用户未选择禁止且不再提示)
- requestPermissionsFromUser(
- new String[]{mPermmReadMedia}, PERMISSION_REQUEST_INTERACTIVE);
- }
- } else {
- if (!mIsOpenImageSelector) {
- Intent intent = new Intent();
- intent.setParam(ImageSelectorActivity.KEY_IS_MULTIPLE_CHOICE, false);
- intent.setParam(ImageSelectorActivity.KEY_MAX_COUNT, Integer.MAX_VALUE);
- Operation operation = new Intent.OperationBuilder()
- .withDeviceId("")
- .withBundleName(getBundleName())
- .withAbilityName("com.example.doodle.imagepicker.ImageSelectorActivity")
- .build();
- intent.setOperation(operation);
- mIsOpenImageSelector = !mIsOpenImageSelector;
- startAbilityForResult(intent, REQ_CODE_SELECT_IMAGE);
- }
- }
- }
- @Override
- public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) {
- super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults);
- if (requestCode == PERMISSION_REQUEST_INTERACTIVE) {
- if (!(grantResults.length > 0 && grantResults[0] == IBundleManager.PERMISSION_GRANTED)) {
- Toast.showLong(this, "请前往“设置”授予“存储访问权限”");
- }
- }
- }
- @Override
- protected void onOrientationChanged(AbilityInfo.DisplayOrientation displayOrientation) {
- super.onOrientationChanged(displayOrientation);
- }
- @Override
- protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
- super.onAbilityResult(requestCode, resultCode, resultData);
- if (requestCode == REQ_CODE_SELECT_IMAGE) {
- mIsOpenImageSelector = false;
- if (resultData == null) {
- return;
- }
- if (resultCode == ImageSelectorActivity.RESULT_OK) {
- Intent intent = new Intent();
- Uri uri = resultData.getUri();
- intent.setUriAndType(uri, null);
- Operation operation = new Intent.OperationBuilder()
- .withDeviceId("")
- .withBundleName(getBundleName())
- .withAbilityName("com.example.doodle.DoodleAbility")
- .build();
- intent.setOperation(operation);
- startAbilityForResult(intent, REQ_CODE_DOODLE);
- }
- } else if (requestCode == REQ_CODE_DOODLE) {
- if (resultData == null) {
- return;
- }
- if (resultCode == DoodleAbility.RESULT_OK) {
- Uri uri = resultData.getUri();
- String path = resultData.getStringParam(DoodleAbility.KEY_IMAGE_PATH);
- if (TextTool.isNullOrEmpty(path)) {
- return;
- }
- showSavePic(uri);
- mPath.setText(path);
- LogUtil.d("onAbilityResult", "path=" + path);
- } else if (resultCode == DoodleAbility.RESULT_ERROR) {
- ToastDialog toastDialog = new ToastDialog(this);
- toastDialog.setText("error").setAlignment(1).setDuration(mDuration).show();
- }
- }
- }
- private void showSavePic(Uri uri) {
- if (mHelper == null) {
- mHelper = DataAbilityHelper.creator(getContext());
- }
- FileDescriptor filedesc = null;
- try {
- filedesc = mHelper.openFile(uri, "r");
- } catch (DataAbilityRemoteException | FileNotFoundException e) {
- e.getMessage();
- }
- ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();
- decodingOpts.desiredSize = new Size(Util.getScreenWidth(this), Util.getScreenHeight(this));
- ImageSource imageSource = ImageSource.create(filedesc, null);
- PixelMap pixelMap = imageSource.createThumbnailPixelmap(decodingOpts, true);
- mSaveImg.setPixelMap(pixelMap);
- }
- }
复制代码完整代码地址:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
侵权投诉