1
커버 플로우로 구성된 애플리케이션을 수행하고 있습니다. 현재 커버 플로우 이미지를 SD 카드에서 가져 오려고합니다. 하지만 이미지를 어떻게 표시해야하는지 정확히 모르겠습니다. 어떻게 SD 카드에서 이미지를 커버 뷰로로드합니까?
이
이미지 어댑터입니다 :public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private FileInputStream fis;
private Integer[] mImageIds = {
//Instead of using r.drawable,
i need to load the images from my sd card instead
R.drawable.futsing,
R.drawable.futsing2
};
private ImageView[] mImages;
public ImageAdapter(Context c) {
mContext = c;
mImages = new ImageView[mImageIds.length];
}
public int getCount() {
return mImageIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@TargetApi(8)
public View getView(int position, View convertView, ViewGroup parent) {
int screenSize = getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK;
ImageView i = new ImageView(mContext);
i.setImageResource(mImageIds[position]);
switch(screenSize) {
case Configuration.SCREENLAYOUT_SIZE_XLARGE:
//Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show();
Display display4 = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation4 = display4.getRotation();
Log.d("XLarge:",String.valueOf(rotation4));
/** LANDSCAPE **/
if(rotation4 == 0 || rotation4 == 2)
{
i.setLayoutParams(new CoverFlow.LayoutParams(300, 300));
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
drawable.setAntiAlias(true);
return i;
}
/** PORTRAIT **/
else if (rotation4 == 1 || rotation4 == 3)
{
i.setLayoutParams(new CoverFlow.LayoutParams(650, 650));
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
drawable.setAntiAlias(true);
return i;
}
break;
default:
}
return null;
}
/** Returns the size (0.0f to 1.0f) of the views
* depending on the 'offset' to the center. */
public float getScale(boolean focused, int offset) {
/* Formula: 1/(2^offset) */
return Math.max(0, 1.0f/(float)Math.pow(2, Math.abs(offset)));
}
}
와 나는 다운로드하고 파일을 저장하는 방법이있다. 난 당신의 코드를 변경 저장된 이미지를 사용하여 이미지 뷰에 SD 카드에서 로딩 이미지 내 커버 플로우
// IF METHOD TO DOWNLOAD IMAGE
void downloadFile() {
new Thread(new Runnable(){ // RUN IN BACKGROUND THREAD TO AVOID FREEZING OF UI
public void run(){
Bitmap bmImg;
URL myFileUrl = null;
try {
//for (int i = 0; i < urlList.size(); i ++)
//{
//url = urlList.get(i);
myFileUrl = new URL("http://static.adzerk.net/Advertisers/d18eea9d28f3490b8dcbfa9e38f8336e.jpg"); // RETRIEVE IMAGE URL
//}
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream in = conn.getInputStream();
Log.i("im connected", "Download");
bmImg = BitmapFactory.decodeStream(in);
saveFile(bmImg);
} catch (IOException e) {
e.printStackTrace();
}}
}).start(); // START THREAD
}
// SAVE THE IMAGE AS JPG FILE
private void saveFile(Bitmap bmImg) {
File filename;
try {
// GET EXTERNAL STORAGE, SAVE FILE THERE
File storagePath = new File(Environment.getExternalStorageDirectory(),"Covers");
storagePath.mkdirs();
filename = new File(storagePath + "/image.jpg");
FileOutputStream out = new FileOutputStream(filename);
bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
MediaStore.Images.Media.insertImage(getContentResolver(),filename.getAbsolutePath(), filename.getName(),
filename.getName());
// ONCE THE DOWNLOAD FINISHES, CLOSE DIALOG
Toast.makeText(getApplicationContext(), "Image Saved!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
어쨌든 sd 카드에 추가 한 다음 mImageIds에 항목을 추가 하시겠습니까? 표시 할 이미지 수를 수동으로 입력하고 싶지 않습니다. – Jolene
@ 졸린 : sdcard 또는 특정 폴더? –
특정 폴더,라고 할 수 있습니다 커버스 – Jolene