2017-10-17 41 views
0

图片活动我不能能够把我的图片到新的活动,从SD卡装载

public class ImageAdapter extends BaseAdapter { 


private Context context; 
Bitmap bm; 

ArrayList<String>images = new ArrayList<String>(); 



// Integer[] images; 
void add(String path) { 
    images.add(path); 
} 


public ImageAdapter(Context c) { 
    context = c; 
} 

@Override 
public int getCount() { 
    return images.size(); 
} 

@Override 
public Object getItem(int position) { 

    return images; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ImageView imageView = new ImageView(context); 
    if (convertView == null) { 
     //  imageView.setImageResource(images[position]); 
     // imageView.setImageBitmap(images); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setLayoutParams(new GridView.LayoutParams(240, 240)); 
     return imageView; 
    } else { 
     imageView = (ImageView) convertView; 

    } 
    bm = decodeSampledBitmapFromUri(images.get(position), 220, 220); 
    imageView.setImageBitmap(bm); 
return imageView; 
} 

private Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) { 
    Bitmap bm = null; 
    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, options); 

    // Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    bm = BitmapFactory.decodeFile(path, options); 

    return bm; 
} 
public int calculateInSampleSize(

     BitmapFactory.Options options, int reqWidth, int reqHeight) { 
    // Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height > reqHeight || width > reqWidth) { 
     if (width > height) { 
      inSampleSize = Math.round((float)height/(float)reqHeight); 
     } else { 
      inSampleSize = Math.round((float)width/(float)reqWidth); 
     } 
    } 

    return inSampleSize; 
} 
} 

主要活动

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent i= new Intent(getApplicationContext(), FullImageActivity.class); 
      i.putExtra("id", position); 
      startActivity(i); 

     } 
    }); 

FullImageActivity

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_full_image); 

    Intent i=getIntent(); 

    int position= i.getExtras().getInt("id"); 
    ImageAdapter imageAdapter= new ImageAdapter(this); 





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

    imageView.setImageBitmap(imageAdapter.bm); \\here I have to show my images that are read from Storage 


} 

我可以”能够正确传递它,因为我的数组列表是字符串。我尝试了很多我知道但却无法正常工作的方式。我也尝试从互联网也没有工作。 我无法通过全图活动显示我的图像。我从SD卡上读取图像,因此无法全屏显示。在此先感谢

+0

在你的'FullImageActivity'创建'ImageAdapter'和'ArrayList的 images'这种情况下的一个新的实例是空的,因为你永远不调用'ImageAdapter.add()'。因此,'getCount()'返回0,'getView()'从不触发,所以你的位图在这一点上是空的。我建议你阅读更多关于Java中的对象实例化的内容,稍后介绍如何在Android中将数据从一个Activity传递到另一个Activity。 – George

回答

0

您的代码未正确执行,因为它没有正确设置。 首先,请考虑使用Picasso或Glide或UniversalImageLoader将图像加载到占位符中,以避免在图像中滚动显示笨重的用户体验。其次,将位置传递给第二个活动并不是你的目标。你正在尝试传递图像。因此,通过图像笑,

First on your getItem() 

你应该返回基于位置images.get(位置)个人形象

而不是返回图像。

其次在点击处理

无论是把它作为一个额外的像

intent.addExtra(myAdapter.getItem(position)) 

,或者如果你有名单已经只是做

intent.addExtra(myList.get(position)) 

or simply cheat with ActivityTwo.imageToShow = myList.get(position) 
startActivityTwo 

这些人将正常工作。

+0

是的,你的权利。 GridView看起来很可怕。我不知道如何纠正它。我尝试了很多东西。仍然不能正常工作 –

+0

我会尝试getItem()兄弟........让我试着告诉你。如果你有任何gridview的示例代码。请告诉我,并告诉我在哪里可以使用 –

+0

我无法为您编写示例项目,但如果您对我提供的上述答案有具体问题,我很乐意澄清 – Sam