我正在ProfileFargment.java
中创建用户的个人资料。现在,它具有个人资料图片(来自用户的Google个人资料图片)和横幅图片。我制作了一个按钮,该按钮基本上允许用户更改其横幅图片,但只能加载某些图像。我不知道这是否与图像大小有关...这是我使用的代码:
按钮
btnEditarFotoCapa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openGallery(); // Chama a função para abrir a galeria
}
});
意图
private void openGallery(){
Intent gallery = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGES);
}
检索图库图片
// Caso a galeria tenha sido aberta, aplica a imagem na foto de capa
//
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == getActivity().RESULT_OK && requestCode == PICK_IMAGES){
imageUri = data.getData();
ImageView imgFotoCapa = getActivity().findViewById(R.id.imgFotoCapa);
Picasso.with(getContext()).load(imageUri).resize(446, 203).into(imgFotoCapa);
/* SharedPreferences myPrefs = getContext().getSharedPreferences("FotoCapa", Context.MODE_PRIVATE);
SharedPreferences.Editor myPrefsEdit = myPrefs.edit();
myPrefsEdit.putString("fotoCapa", imageUri.toString());
myPrefsEdit.commit(); */
}
}
答案 0 :(得分:1)
尝试使用此代码..
使用Glide加载图像既简单又最新。
将滑行依赖添加到应用程序级别的gradle文件中。.
implementation 'com.github.bumptech.glide:glide:4.7.1'
下面的代码打开画廊后
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(
Intent.createChooser(intent, "Select File"),
REQUEST_GALLERY);
获取选择图像的路径。
/**
* this method used to get camera image path.
*
* @param
* @return
*/
public String getPathFromURI(Uri contentUri) {
String res = null;
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, null, null, null);
if (cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
return res;
}
该onActivity Result方法之后。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String path = getPathFromURI(uri);
Glide.with(this)
.load(path)
.apply(RequestOptions.circleCropTransform())
.into(epfIvUserImage);
}
}
答案 1 :(得分:0)
我最近像您一样使用了 Picasso 库,我遇到了类似的问题。之所以没有加载某些图像,是因为它们的尺寸较大。由于某些缓存问题,毕加索在下载大图像时会遇到一些问题。
此问题的一个例子 GitHub Picasso Large Image Issue
ImageRequest示例
RequestQueue rq = Volley.newRequestQueue(context);
ImageRequest request = new ImageRequest(link, new
Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
setBackground(context,bitmap);
}
}, 0, 0, null, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
Log.e("VolleyImage",error.toString());
}
});
rq.add(request);
答案 2 :(得分:0)
使用毕加索变换
Picasso.with(context).load(url).transform(new ImageTransformation()).placeholder(placeHolder).error(placeHolder).into(imageView);
public class ImageTransformation implements Transformation {
@Override public Bitmap transform(Bitmap source) {
int targetWidth = 256;
double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
int targetHeight = (int) (targetWidth * aspectRatio);
Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, true);
if (result != source) {
// Same bitmap is returned if sizes are the same
source.recycle();
}
return result;
}
@Override public String key() {
return "cropPosterTransformation" + 256;
}
}
答案 3 :(得分:-1)
在活动的onActivityResult
中,致电super.onActivityResult()
。通常,只有当您使活动覆盖onActivityResult
并调用其super
时,该片段才能捕获结果。