【问题标题】:Take image from gallery and set to a CircleImageView从图库中获取图像并设置为 CircleImageView
【发布时间】:2019-06-28 15:59:41
【问题描述】:

所以我在一个片段中,我想从图库中获取图像并设置为 CircleImageView。我开始了一个意图并正确选择了图像,但是在 onActivityResult 上没有设置图像。保留默认的 src 图像。这是代码

片段布局

<de.hdodenhof.circleimageview.CircleImageView
                android:id="@+id/photo"
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:src="@drawable/ic_launcher_background"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="15dp"
                />

片段类

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        LayoutInflater lf = getActivity().getLayoutInflater();
        view =  lf.inflate(R.layout.fragment_profile,container,false);
        mContext = getActivity();

        mProfilePhoto = (CircleImageView) view.findViewById(R.id.profile_photo);
        view.findViewById(R.id.profile_photo).setOnClickListener(this);

        return view;

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.profile_photo:
                Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                try {
                    i.putExtra("return-data", true);
                    startActivityForResult(
                            Intent.createChooser(i, "Select Picture"), 0);
                }catch (ActivityNotFoundException ex){
                    ex.printStackTrace();
                }
                break;
        }

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0 && resultCode == Activity.RESULT_OK){
            try {
                Bundle bundle = data.getExtras();
                Bitmap bitmap = bundle.getParcelable("return-data");
                mProfilePhoto.setImageBitmap(bitmap);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

实现这个片段的活动有它的 onActivityResult,只需要调用 super();

另外,加载图像后,它会自动调整大小以适应圆形图像视图吗?如果不是我该怎么办?提前致谢

【问题讨论】:

    标签: android imageview setbackground


    【解决方案1】:

    使用GlideImageView 而不是CircleImageView 并将您的Bitmap 设置为像关注一样的圆圈

    第 1 步。 添加依赖项

    repositories {
        mavenCentral()
        google()
    }
    
    dependencies {
        implementation 'com.github.bumptech.glide:glide:4.9.0'
        annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
    }
    

    第 2 步。 从数据中获取位图并放入图像视图

    Bitmap photo = (Bitmap) data.getExtras().get("return-data");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
    Glide.with(this)
            .load(stream.toByteArray())
            .apply(RequestOptions.circleCropTransform())
            .into(imageView);
    

    就是这样

    【讨论】:

    • 无法解析方法 asBitmap() 和 CircleTransform()
    【解决方案2】:

    我好像遇到过这个问题。我在所有项目中都使用你的库。

    if (requestCode != RESULT_CANCELED){
                if (requestCode == GALLERY_REQUEST){
                    Uri path = data.getData();
                    try {
                        photo = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), path);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mProfilePhoto.setImageBitmap(photo);}}
    

    【讨论】:

    • 照片是干什么用的?
    • 对不起,我的错。我应该使用 setImageBitmap(photo) 而不是 setImageUri(path)。我更新了我的答案。
    • İ如果我的回答对你有用,你能接受我的回答吗?
    【解决方案3】:

    您为什么要以捆绑包形式获取数据?尝试以 uri 形式获取并将其设置为圆形图像视图。

     @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.profile_photo:
                    Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        startActivityForResult(
                                Intent.createChooser(i, "Select Picture"), 0);   
                    break;
            }
    
        }
    
      @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if(requestCode==0 && resultCode == Activity.RESULT_OK&&data!=null){
                   Uri uri=data.getData();
                    mProfilePhoto.setImageURI(uri);
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多