0

私はsdcardに保存された画像を持っていて、それをgridviewに表示しています.今、gridview OnItemCLick Listenerに全画面画像を表示したいと思います.次の画面で全画面画像を取得していません.空白の画面のみが表示されます.

 public class MyMenu extends Activity{
    public class ImageAdapter extends BaseAdapter {
        private Context mContext;
        ArrayList<String> itemList = new ArrayList<String>();
        public ImageAdapter(Context c) {
            mContext = c; 
        }
        void add(String path){
            itemList.add(path); 
        }
        public int getCount() {
            return itemList.size();
        }
        public Object getItem(int arg0) {

            return null;
        }
        public long getItemId(int position) {

            return position;
        }
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(90, 70));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(8, 8, 8, 8);
            } else {
                imageView = (ImageView) convertView;
            }

            Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 90, 70);
            imageView.setImageBitmap(bm);
            return imageView;
        }
        public 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;    
        }
    }
    ImageAdapter myImageAdapter;
    private static final int CAMERA_REQUEST = 1888; 
    ImageButton camera,lib,baby,info;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.mymenu);
        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position,
                    long id) {
                Intent i5=new Intent(getApplicationContext(),FullScreenSd.class);
                i5.putExtra("id", position);
                startActivity(i5);
            }
        });
        myImageAdapter = new ImageAdapter(this);
        gridview.setAdapter(myImageAdapter);
        File folder = new File(Environment.getExternalStorageDirectory() + "/temp/");
        if (folder.exists()) {
            String ExternalStorageDirectoryPath = Environment
                    .getExternalStorageDirectory()
                    .getAbsolutePath();
            String targetPath = ExternalStorageDirectoryPath + "/temp/";
            File targetDirector = new File(targetPath);
            File[] files = targetDirector.listFiles();
            for (File file : files){
                myImageAdapter.add(file.getAbsolutePath());
            } 
        }

受信クラスは、

image=(ImageView)findViewById(R.id.image);
        Intent i = getIntent();
        int resId = i.getExtras().getInt("id");
        image.setImageResource(resId);
4

3 に答える 3

0
i5.putExtra("id", position);

image.setImageResource(resId);

ここで正確に何をしているのですか?position はグリッドビューでの位置です。なぜIDとして取ったのですか?

于 2012-11-05T06:12:53.997 に答える
0

した部分i5.putExtra("id", position);がクリックされた要素の位置です。それは必要なものではありません。クリックされたアイテムの resId が必要です。resIds が何らかの配列に格納されていると仮定すると、渡す必要がありますi5.putExtra("id", resIdArray[position]);

于 2012-11-05T06:20:58.143 に答える
0

There are four solution of this problem but first two solution is proper.

1) Convert Bitmap into Byte Array and then pass into activity.

Convert Bitmap to Byte Array:-

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Pass byte array into intent:-

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);

Get Byte Array from Bundle and Convert into Bitmap Image:-

Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);

image.setImageBitmap(bmp);

2) First Save Selected image into internal or external memory and then get image into next activity and display in full screen.

3) Pass Image Url to next activity and then download image again in Full screen activity and then display in imageview.

4) Pass bitmap into activity.(But If your image size is too large at that time this solution is not working)

于 2012-11-05T06:55:37.933 に答える