我正在做一个由封面流程组成的应用程序。 目前我正在尝试从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)));
}
}
这就是我下载和保存文件的方式。我需要使用保存的图像并将其上传到我的coverflow
// 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();
}
}
答案 0 :(得分:1)
用于将图像从Sd卡加载到ImageView,将代码更改为:
将图片路径放在数组中:
String strpath=Environment.getExternalStorageDirectory();
private String[] mImageIds = {
strpath+"a.jpg",
strpath+"b.jpg",
strpath+"c.jpg",
.....
};
要将getView设置为ImageView,您需要创建Drawable:
ImageView i = new ImageView(mContext);
i.setImageDrawable(Drawable.createFromPath(mImageIds[position]));