【发布时间】:2016-02-15 10:55:50
【问题描述】:
我正在开发一个带有图库选项的应用程序。我在JSON 中有一组 URL。我已经解析并保存在字符串ArrayList 中。现在我只想在GalleryView 中显示这些图像。我浏览了各种没有帮助的参考资料。我也使用了UniversalImageLoader,它仅适用于一个 URL。我需要加载多个 URL,这些 URL 存在于我的ArrayList 中。请给我一些提示来实现它。
更新
这是我的画廊活动课程
public class Gallery extends AppCompatActivity {
public ArrayList<GalleryItem> imageURL;
private ImageView selectedImageView;
ArrayList<Drawable> dataDraw= new ArrayList<>();
private GridView mGridView;
public Gallery gallery;
private GalleryImageAdapter galImageAdapter;
public String url="my_url";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
mGridView = (GridView) findViewById(R.id.galleryGrid);
imageURL=new ArrayList<>();
new AsyncHttpTaskforGallery().execute(url);
// galImageAdapter = new GalleryImageAdapter(this, dataDraw);
galImageAdapter=new GalleryImageAdapter(this,R.layout.gallery_item,imageURL);
mGridView.setAdapter(galImageAdapter);
}
public class AsyncHttpTaskforGallery extends AsyncTask<String, Void, Integer> {
@Override
protected Integer doInBackground(String... params) {
Integer result = 0;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(new HttpGet(params[0]));
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == 200) {
String response = streamToString(httpResponse.getEntity().getContent());
parseResult(response);
result = 1;
}
else {
result = 0;
}
} catch (Exception e) {
Log.d("TAG", e.getLocalizedMessage());
}
return result;
}
@Override
protected void onPostExecute(Integer result) {
if (result == 1) {
galImageAdapter.setGridData(imageURL);
}
else {
}
}
}
String streamToString(InputStream stream) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
String line;
String result = "";
while ((line = bufferedReader.readLine()) != null) {
result += line;
}
if (null != stream) {
stream.close();
}
return result;
}
private void parseResult(String result) {
try {
JSONArray posts = new JSONArray(result);
GalleryItem galleryItem;
for (int i = 0; i < posts.length(); i++) {
JSONObject post = posts.optJSONObject(i);
String path = post.optString("path");
String newText=path.replace("\\", "/");
String image="http://***/"+newText;
Log.e("imageURL", image);
galleryItem=new GalleryItem();
galleryItem.setImage(image);
imageURL.add(galleryItem);
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
}
画廊适配器
public class GalleryImageAdapter extends ArrayAdapter<GalleryItem> {
private Context mContext;
private int layoutResourceId;
private ArrayList<GalleryItem> mGalleryData = new ArrayList<GalleryItem>();
public GalleryImageAdapter(Context mContext, int layoutResourceId, ArrayList<GalleryItem> mGalleryData) {
super(mContext, layoutResourceId, mGalleryData);
this.layoutResourceId = layoutResourceId;
this.mContext = mContext;
this.mGalleryData = mGalleryData;
}
public void setGridData(ArrayList<GalleryItem> mGalleryData) {
this.mGalleryData = mGalleryData;
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder;
if (row == null) {
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageView = (ImageView) row.findViewById(R.id.IMVgallery);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
GalleryItem item = mGalleryData.get(position);
Picasso.with(mContext).load(item.getImage()).into(holder.imageView);
return row;
}
static class ViewHolder {
ImageView imageView;
}
}
在 gridview 中显示图像看起来不太好。我需要在galleryview中显示并单击图像,它应该展开。
【问题讨论】:
-
试试 picasoo 安卓版
-
好吧...如果我使用 picasoo,它可以滚动吗?比如左右滑动?
-
Picasoo 或 glide 将允许异步加载图像。它与滑动无关。
标签: android android-layout android-volley android-image android-gallery