-1
我知道有很多这样的帖子,但我的是一个有点特别。Android - ImageView/ImageButton与画廊或相机的图像
问题描述:
我希望有一个公共类,显示一个小对话框,选择图像源,相机或画廊。选择后,ImageView将显示图像,图像将保存在应用程序文件夹中。这个课程将从许多活动中调用。所以,我有这样的代码:
PhotoActivity.java
package com.app.test;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.provider.MediaStore;
import java.util.ArrayList;
import java.util.List;
public class PhotoActivity {
private Context context;
public PhotoActivity(Context current){
this.context = current;
}
//this will be called from other activities
public void Change_Photo(final Activity a) {
List<String> options = new ArrayList<String>();
options.add(context.getResources().getString(R.string.camera));
options.add(context.getResources().getString(R.string.gallery));
options.add(context.getResources().getString(R.string.cancel));
//Create sequence of items
final CharSequence[] Sources = options.toArray(new String[options.size()]);
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
dialogBuilder.setTitle(context.getResources().getString(R.string.select_image_source));
dialogBuilder.setItems(Sources, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (item==0) {//camera
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
a.startActivityForResult(takePicture, 0);//zero can be replaced with any action code
}else if (item == 1) {//gallery
Intent pickPhoto = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
a.startActivityForResult(pickPhoto , 1);//one can be replaced with any action code
}
}
});
//Create alert dialog object via builder
AlertDialog alertDialogObject = dialogBuilder.create();
//Show the dialog
alertDialogObject.show();
}
}
我加在清单文件:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
其他activites有一个ImageView的或ImageButton的是这样的:
<ImageButton
android:id="@+id/btn_picture"
android:layout_width="140dp"
android:layout_height="140dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="false"
android:elevation="0dp"
android:gravity="center_horizontal"
android:src="@drawable/camera" />
它在开始时有相机图像,但会s最终如何选择图像。
下一步必须做什么才能显示此ImageButton中选定或拍摄的照片?
比getBitmap()和setImageBitmap()更好的选择是使用[图像加载库](https://android-arsenal.com/tag/46),如毕加索。答案中显示的代码在主应用程序线程上加载图像,这会冻结UI。 – CommonsWare
这样做的工作。一个小问题。当我拍摄一张新照片时,ImageButton显示它向左旋转90度。为什么? –
这取决于照片的大小,拍一张小照片,然后重试 –