我在ListView中有两个NetworkImageView元素,一个是可见的NetworkImageView元素,另一个是不可见的NetworkImageView元素。我已经为Listview元素实现了一个onlickListener,只要我在ListView中选择元素,它就会调用一个新的活动。在调用新活动时,我将这两个NetworkImageView元素传递给新活动。但我只能看到新活动中的可见NetworkImageView元素和空白空间而不是另一个NetworkImageView元素。
main_activity.java的代码
ListView lv=(ListView) findViewById(R.id.list);
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id)
{
try{
ImageView image1=(ImageView) view.findViewById(R.id.visible);
ImageView image2=(ImageView) view.findViewById(R.id.invisible);
image1.buildDrawingCache();
image2.buildDrawingCache();
Bitmap bmp1=image1.getDrawingCache();
Bitmap bmp2=image2.getDrawingCache();
Intent i=new Intent(MainActivity.this, new_Activity.class);
i.putExtra("picture1", bmp1);
i.putExtra("picture2", bmp2);
startActivity(i);
}
catch (Exception e)
{Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();}}});
new_Activity.java的代码
Intent i = getIntent();
Bitmap bmp1=(Bitmap)i.getParcelableExtra("picture1");
Bitmap bmp2=(Bitmap)i.getParcelableExtra("picture2");
ImageView image1 = (ImageView) findViewById(R.id.desc_image1);
ImageView image2 = (ImageView) findViewById(R.id.desc_image2);
image1.setImageBitmap(bmp1);
image2.setImageBitmap(bmp2);
XML文件
activity_main.xml中
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/visible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/invisible"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
new_activity xml
<ImageView
android:id="@+id/desc_image1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/desc_image2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
答案 0 :(得分:0)
确保已在不可见的NetworkImageView中设置了图像。 只需将其显示并检查图像是否已设置。
像...
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/invisible"
android:visibility="visible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
另外,
bmp2=image2.getDrawingCache();
只接受可见部分,我想。
感谢。
答案 1 :(得分:0)
而不是
Bitmap bmp1=image1.getDrawingCache();
尝试
Bitmap bmp1 = ((BitmapDrawable)image1.getDrawable()).getBitmap();
答案 2 :(得分:0)
我遇到了类似的问题。在我的ListView中,每个项目都包含一个ImageView来显示来自服务器的图像,当用户单击ImageView时,我需要在视图中显示它以支持缩放功能。
我试过这个:
holder.iv.setDrawingCacheEnabled(true);
Bitmap bitmap = ((ImageView) v).getDrawingCache();
mBrowseImageListener.onBrowseImage(bitmap);
但是当屏幕上的列表长度时,我得到一个错误的位图,通常是另一个项目上显示的位图当前。
我试过这个:
holder.iv.setDrawingCacheEnabled(true);
Bitmap bitmap = ((ImageView) v).getDrawingCache();
mBrowseImageListener.onBrowseImage(bitmap);
holder.iv.setDrawingCacheEnabled(false);
不幸的是,这导致了一个致命的例外:
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap
最后我找到了这个解决方案:
Drawable drawable = holder.iv.getDrawable();
if (!(drawable instanceof BitmapDrawable)){
Log.e(LOG_TAG, "This drawable is not an instance of BitmapDrawable!");
return;
}
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
if (bitmap==null || bitmap.isRecycled()){
Log.w(LOG_TAG, "This bitmap was recycled!");
return;
}
mBrowseImageListener.onBrowseImage(bitmap);
希望这对你有所帮助。