2017-10-17 21 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 


} 

私ができます」私のarraylistは文字列なので、適切に渡すことはできません。私は知っている多くの方法を試みたが、それは正しく動作しません。私はインターネットからもやってみましたが、働いていません 画像をフル画像で表示することはできません。私はSDカードから画像を読んだので、全面的に表示されません。事前に感謝します

+0

'FullImageActivity'では' ImageAdapter'の新しいインスタンスを作成し、 'ImageAdapter.add()'を決して呼び出さないので、このインスタンスの 'ArrayList images'は空です。したがって、 'getCount()'は0を返し、 'getView()'は決してトリガされないので、この時点でビットマップはnullになります。私はあなたがJavaでのオブジェクトのインスタンス化について、そして後でAndroidのあるアクティビティから別のアクティビティへデータを渡す方法について少しお読みになることをお勧めします。 – George

答えて

0

正しく設定されていないため、コードが正しく実行されていません。 まず最初に、ピカソやグライド、またはUniversalImageLoaderを使用して画像をプレースホルダに読み込んで、不慣れなユーザーエクスペリエンスを画像にスクロールさせないようにしてください。

第2に、2番目のアクティビティにポジションを渡すことは目標ではありません。あなたはイメージを渡そうとしています。ですから、画像を返すというし、位置images.get(位置)

に基づいて個々の画像を返す必要があります、笑

First on your getItem() 

を画像を渡します。

第二に、あなたのクリックハンドラで

intent.addExtra(myAdapter.getItem(position)) 

のような余分なようにそれを渡しいずれか、またはあなたがリストを持っている場合は、すでにちょうどこれらの

intent.addExtra(myList.get(position)) 

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

誰もが正常に動作します行います。

+0

ええ、あなたの権利。 GridViewはひどく見えます。私はそれを修正する方法を知らない。私は多くのことを試みました。まだ正常に動作していません –

+0

私はgetItem()bro ........しようとしてみましょう。 gridviewのサンプルコードがある場合。私に示唆して、どこに使用するか教えてください –

+0

あなたのサンプルプロジェクトを書くことができませんが、私が提供した上記の回答に関する特定の質問がある場合は、私は明らかにして嬉しいです – Sam

関連する問題