中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
效果图如下所示: 该组件有画笔缩放,旋转等功能,可以自定义布局,掉用其接口完成图片编辑的功能。 部分代码:
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); } }
完整代码地址: https://gitee.com/jltfcloudcn/jump_to/tree/master/Doodle图像编辑器
微信扫码分享