0

文字列パス (データベースから取得したもの) から画像を表示していますが、1 つの画像を表示しても問題ありません。しかし、4 つの画像がある場合、1 つの画像 (最初の画像) のみが表示され、他の画像は表示されません。私のコードは次のとおりです。

 try{
    name.setText(nameString);
    school.setText(schoolString);
    psupervisor.setText(info.getPsupervisor());
    pdate.setText(info.getPdate());
    a.setChecked(Boolean.parseBoolean(info.getPtick1()));
    b.setChecked(Boolean.parseBoolean(info.getPtick2()));
    c.setChecked(Boolean.parseBoolean(info.getPtick3()));
    pcomment1.setText(info.getPcomment1());
    psignature1.setImageBitmap(resizeSignatureBitmap(info.getPsignature1()));
    pcomment2.setText(info.getPcomment2());
    psignature2.setImageBitmap(resizeSignatureBitmap(info.getPsignature2()));
    pdate2.setText(info.getPdate2());
    d.setChecked(Boolean.parseBoolean(info.getPtick4()));
    e.setChecked(Boolean.parseBoolean(info.getPtick5()));
    f.setChecked(Boolean.parseBoolean(info.getPtick6()));
    pcomment3.setText(info.getPcomment3());
    psignature3.setImageBitmap(resizeSignatureBitmap(info.getPsignature3()));
    pcomment4.setText(info.getPcomment4());
    psignature4.setImageBitmap(resizeSignatureBitmap(info.getPsignature4()));
    Log.d("PREPOST: ", log2);
    db.close();
 }
 catch(Exception ex){}

}

//method to resize the bitmap before displaying
 public Bitmap resizeSignatureBitmap(String imagePath){

    BitmapFactory.Options options = new BitmapFactory.Options();
    InputStream is = null;
    try {
            is = new FileInputStream(imagePath);
    } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
    BitmapFactory.decodeStream(is,null,options);
    try {
            is.close();
    } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
    }
    try {
            is = new FileInputStream(imagePath);
    } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
    // here w and h are the desired width and height
    options.inSampleSize = Math.max(options.outWidth/w, options.outHeight/h);
    // bitmap is the resized bitmap
    Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);

     return bitmap;
}

私がしていることに何か問題がありますか?私の間違いが見つからないので、私の間違いを親切に指摘してください。エラーはありません。表示されないだけです。デフォルトでは、1 つの画像のみが表示され、常に最初の画像 (psignature1) であり、コメントアウトすると、2 番目の画像 (psignature2) が表示されますが、残りは表示されません。

お時間をいただきありがとうございます!

4

2 に答える 2

0

psignature1、psignature2、psignature3が同じIDで定義されている可能性があります

多分あなたのコードはこのようなものです

psignature1 = (ImageButton) findViewById(R.id.psignature1);
psignature2 = (ImageButton) findViewById(R.id.psignature1);
psignature3 = (ImageButton) findViewById(R.id.psignature1);

各IDを変更してみてください


これがSDカードの画像用のビットマップコンプレッサーです。編集するだけです。

public Bitmap compressBitmapResource(String filePath, int reqWidth,
        int reqHeight) {

     // First decode with inJustDecodeBounds=true to check dimensions
     final BitmapFactory.Options options = new BitmapFactory.Options();

     options.inJustDecodeBounds = true;
     BitmapFactory.decodeFile(filePath, options);

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

     // Decode bitmap with inSampleSize set
     options.inPurgeable = true;
     options.inJustDecodeBounds = false;
     return BitmapFactory.decodeFile(filePath, options);

}

    public int calculateBitmapSize(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;
}
于 2013-01-11T08:29:28.733 に答える
0
//method to resize the bitmap before displaying
public Bitmap resizeSignatureBitmap(String imagePath){

 BitmapFactory.Options options = new BitmapFactory.Options();
InputStream is = null;
try {
        is = new FileInputStream(imagePath);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // here w and h are the desired width and height
options.inSampleSize = Math.max(options.outWidth/w, options.outHeight/h);
// bitmap is the resized bitmap
 Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);
is=null;
 return bitmap;
}

このようにあなたのメソッドを書いてください..そしてあなたは完了です。

于 2013-01-11T08:22:29.120 に答える