如何通过将位图图像复制到另一个位图对象来显示它?

时间:2016-05-05 12:16:06

标签: android bitmap android-asynctask dialog imageview

我试图“膨胀”或“放大”我从URL加载到ImageView中的图像。我想然后获取已加载的Bitmap并将其存储到Bitmap对象中,以便我可以使用另一个ImageView调用AlertDialog并将其ImageBitmap设置为我存储的ImageBitmap。

我使用此AsyncTask类来执行此操作:

class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;

 public DownloadImageTask(ImageView bmImage) {
    this.bmImage = bmImage;
 }

 protected Bitmap doInBackground(String... urls) {
    String urldisplay = urls[0];
    Bitmap mIcon11 = null;
    try {
        InputStream in = new java.net.URL(urldisplay).openStream();
        mIcon11 = BitmapFactory.decodeStream(in);
    } catch (Exception e) {
        Log.e("Error", e.getMessage());
        e.printStackTrace();
    }
    return mIcon11;
 }

 protected void onPostExecute(Bitmap result) {
    bmImage.setImageBitmap(result);
 }
}

以下是我在Activity中调用onCreate方法的方法:

public void loadUI() throws IOException {
    prefs = getSharedPreferences(SELECTED_PREFS, MODE_PRIVATE);

    lblEntryNumber = (TextView) findViewById(R.id.lblCEntryNumber);
    lblEntryNumber.setText(cosplayerPrefs.getString(KEY_ENTRY_NUMBER, null));

    ImageView imgReference = (ImageView) findViewById(R.id.imgReference);

    if (prefs.getString(KEY_REFERENCE_LINK, null).startsWith("http")){
        bImage = new DownloadImageTask((ImageView) findViewById(R.id.imgReference)).execute(cosplayerPrefs.getString(KEY_REFERENCE_LINK, null)).get();
    } else {
        Toast.makeText(ContestantActivity.this, "Invalid URL for Image...", Toast.LENGTH_SHORT).show();
    }

    imgReference.setOnClickListener(new View.OnClickListener() {
        Bitmap clone = bImage;
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(ContestantActivity.this);
            ImageView imgRefInflated = (ImageView) findViewById(R.id.imgRefInflated);
            imgRefInflated.setImageBitmap(clone);

            builder.setNegativeButton("Close", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });

            AlertDialog dialog = builder.create();
            dialog.setContentView(R.layout.dialog_layout);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

            dialog.show();
        }
    });

当我运行此应用时,应用会在imgRefInflated.setImageBitmap(clone);中遇到一些错误,我不知道为什么。有人建议我能做些什么来解决这个问题吗?

编辑:似乎ImageView imgRefInflated返回null,但我不明白为什么。

2 个答案:

答案 0 :(得分:2)

我终于找到了答案。问题是我需要在单独的视图中对dialog_layout.xml进行膨胀和存储,然后声明我的ImageView变量并将View设置为我的对话框。 Picasso适用于加载图片。这是我的最终结果代码。

imgReference.setOnClickListener(new View.OnClickListener() {
        //Bitmap clone = bImage;
        @Override
        public void onClick(View v) {
            View view = View.inflate(ContestantActivity.this, R.layout.dialog_layout, null);
            ImageView imgRefInflated = (ImageView) view.findViewById(R.id.imgRefInflated);
            Picasso.with(ContestantActivity.this).load(sURL).into(imgRefInflated);

            AlertDialog.Builder builder = new AlertDialog.Builder(ContestantActivity.this);

            builder.setNegativeButton("Close", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });

            AlertDialog dialog = builder.create();
            dialog.setView(view);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.show();
        }
    });

我希望其他人觉得这很有用。

答案 1 :(得分:0)

单行为您完成所有操作,使用Picasso library

15rf67

这指的是上下文(例如活动)。