如何从库中选择图像后显示警告对话框?

时间:2014-04-15 10:23:08

标签: android alertdialog

我在第一个活动中从图库中选择一个图像,然后使用所选图像我将进行第二个活动。在这里,我想显示一个警告对话框,显示消息"正在加载...."用户从图库中选择图像后,在进行下一个活动之前,请帮助我。

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);

       }

     }





   }

1 个答案:

答案 0 :(得分:0)

嗯,你看,为了显示一个显示消息“正在加载......”的对话框,你需要引用一个Running Activity,或者更确切地说是一个当前对用户可见的活动的引用。 例如,如果您在活动A上显示此消息,然后(不取消此对话框)您启动另一个活动B,那么这将给您一个错误。这是因为您使用了活动A的引用来显示对话框,当您启动活动B时,活动A失去了可见性。

在这个后退中,我认为你最好将文件流转换为活动A本身的位图。稍后将其保存为静态变量。可能是,创建一个Utills类,并让它具有以下变量

public static Bitmap reusable;

在活动A中,您初始化“可重用”,最后在活动B中使用它。在将“可重用”设置为活动B中的ImageView之后,您还可以销毁此内存单元。这可以减少您的延迟。此外,如果这个延迟是在模拟器上测试代码时,我认为任何真实设备上的延迟都会减少。