我试图“膨胀”或“放大”我从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,但我不明白为什么。
答案 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)