android 关于调用系统自带的图片裁剪 华为为圆形裁剪框,能改成方形吗

qq_36398455 2017-08-25 10:27:08
android 关于调用系统自带的图片裁剪 华为为圆形裁剪框,能改成方形吗?
用华为意外的手机测试的时候,调用系统自带的裁剪框是方形的,但是用华为手机测试时就变成了圆形,看了很多帖子说用
if (android.os.Build.MODEL.contains("HUAWEI")) {
intent.putExtra("aspectX", 9998);
intent.putExtra("aspectY", 9999);
}else {
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
}
加个判断将比例改为不是1:1之后就行,但是经过实践还是不行,请问还有其他方法吗
...全文
1697 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlesubor 2018-11-19
  • 打赏
  • 举报
回复
判断条件换一下, 测试好用: Build.MANUFACTURER.equals("HUAWEI"); https://blog.csdn.net/wapchief/article/details/80669647
qq_32568937 2018-06-13
  • 打赏
  • 举报
回复
默认的就是圆形的非圆形怎么传
jklwan 2017-08-26
  • 打赏
  • 举报
回复
只是显示的圆形吧,裁剪出来还是方形的
水手辛巴 2017-08-26
  • 打赏
  • 举报
回复
意图可以设置期望圆形还是非圆形,你可以试下: 下面是我之前写过的获取剪裁代码片段

@SuppressWarnings("all")
    public static Intent cropPicture(Context context, Uri source, int aspectX, int aspectY, int outX, int outY, boolean scaled, boolean returnData, boolean circleCrop) {
        String author = context.getPackageName() + AUTHOR;
        if (ContentResolver.SCHEME_FILE.equals(source.getScheme())) {
            //android N 不允许向外部应用发送file://的uri
            File file = new File(source.getPath());
            if (file.exists()) {
                try {
                    source = FileProvider.getUriForFile(context, author, file);
                } catch (Exception e) {
                    //如果返回的是未配置的路径则使用原始的uri
                    Timber.e(e);
                }
            }
        }
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(source, "image/*");
        intent.putExtra("crop", true);
        intent.putExtra("aspectX", aspectX);
        intent.putExtra("aspectY", aspectY);
        intent.putExtra("outputX", outX);
        intent.putExtra("outputY", outY);
        intent.putExtra("scale", scaled);
        intent.putExtra("return-data", returnData);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG);
        intent.putExtra("circleCrop", circleCrop);
        File cropTempFile = new File(StorageUtils.getProperCacheDir(context, TEMP_DIRECTORY), CROP_TEMP_FILE);
        if (!cropTempFile.getParentFile().exists()) {
            cropTempFile.getParentFile().mkdirs();
        }
        if (cropTempFile.exists()) {
            cropTempFile.delete();
        }
        Uri outPutUri = FileProvider.getUriForFile(context, author, cropTempFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
        try {
            List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
            for (ResolveInfo resolveInfo : resInfoList) {
                String packageName = resolveInfo.activityInfo.packageName;
                context.grantUriPermission(packageName, outPutUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                context.grantUriPermission(packageName, source, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
            }
        } catch (SecurityException e) {
            //maybe no permission to grant origin source uri
            //if picture is large then this operation will block main thread long time
            InputStream in = null;
            FileOutputStream outputStream = null;
            try{
                in = context.getContentResolver().openInputStream(source);
                File cropTempSourceFile = new File(StorageUtils.getProperCacheDir(context,TEMP_DIRECTORY),CROP_TEMP_SOURCE_FILE);
                if (!cropTempSourceFile.getParentFile().exists()) {
                    cropTempSourceFile.getParentFile().mkdirs();
                }
                outputStream = new FileOutputStream(cropTempSourceFile);
                byte[] buffer = new byte[512];
                int len;
                while ((len = in.read(buffer)) != -1){
                    outputStream.write(buffer,0,len);
                }
                outputStream.flush();
                outputStream.close();
                outputStream = null;
                in = null;
                Uri newSource = FileProvider.getUriForFile(context,author,cropTempSourceFile);
                intent.setDataAndType(newSource, "image/*");
            }catch (Exception e1){
                Timber.e(e1);
            }finally {
                CloseUtils.closeIOQuietly(in,outputStream);
            }
        }catch (Exception e){
            Timber.d(e);
        }
//        }
        return intent;
    }
qq_36398455 2017-08-25
  • 打赏
  • 举报
回复
引用 1 楼 qq_26851595 的回复:
没有方法,不用试了,这是系统的UI绘制的,你根本控制不了
那就是华为的手机都只能是圆形?
MissZzz丶 2017-08-25
  • 打赏
  • 举报
回复
没有方法,不用试了,这是系统的UI绘制的,你根本控制不了

80,361

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧