我在第一个活动中从图库中选择一个图像,然后使用所选图像我将进行第二个活动。在这里,我想显示一个警告对话框,显示消息"正在加载...."用户从图库中选择图像后,在进行下一个活动之前,请帮助我。
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
public class LauncherActivity extends Activity
{
private static int RESULT_LOAD_IMAGE = 1;
ImageButton gallery;
ImageView gallery_image;
int height = 500;
Intent i;
Intent intent;
int width = 380;
@SuppressWarnings("deprecation")
protected void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
setContentView(R.layout.launcher);
gallery = (ImageButton)findViewById(R.id.select_photo);
camera = (ImageButton)findViewById(R.id.take_photo);
free_apps = (ImageButton)findViewById(R.id.free_apps);
gallery.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent gallery_intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(gallery_intent, RESULT_LOAD_IMAGE);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setMessage("Loading....");
final AlertDialog alert = dialog.create();
alert.show();
new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
alert.dismiss();
}
}.start();
Bitmap bitmap_for_gallery = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(picturePath), width, height, true);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap_for_gallery.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
Intent intent = new Intent(LauncherActivity.this, MainActivity.class);
intent.putExtra("image", byteArray);
startActivity(intent);
}
}
}
答案 0 :(得分:0)
嗯,你看,为了显示一个显示消息“正在加载......”的对话框,你需要引用一个Running Activity,或者更确切地说是一个当前对用户可见的活动的引用。 例如,如果您在活动A上显示此消息,然后(不取消此对话框)您启动另一个活动B,那么这将给您一个错误。这是因为您使用了活动A的引用来显示对话框,当您启动活动B时,活动A失去了可见性。
在这个后退中,我认为你最好将文件流转换为活动A本身的位图。稍后将其保存为静态变量。可能是,创建一个Utills类,并让它具有以下变量
public static Bitmap reusable;
在活动A中,您初始化“可重用”,最后在活动B中使用它。在将“可重用”设置为活动B中的ImageView之后,您还可以销毁此内存单元。这可以减少您的延迟。此外,如果这个延迟是在模拟器上测试代码时,我认为任何真实设备上的延迟都会减少。