从毕加索添加图像到Gridview
我正在从一个项目中,我从数据库中动态获取图像URL。我之前在LinearLayout
创建了一个画廊,这很好。但我想创建一个Gridview
,我可以用相同的方式添加照片。任何人都可以给我提示或想法从哪里开始。我也在这里创建了一个GridView
片段(我想要片段中的gridview)和ImageAdapter
类。
http://developer.android.com/guide/topics/ui/layout/gridview.html从毕加索添加图像到Gridview
本教程适用于从我不需要的本地资源加载图像。 我也试过在线搜索,但找不到合适的方法。任何帮助,将不胜感激。谢谢!。
编辑:
ImageAdapter.java
package com.example.imran.myapp;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
/**
* Created by imran on 28-Mar-16.
*/
public class ImageAdapter extends BaseAdapter {
private Context mContext;
String url = "https://www.google.com/images/srpr/logo11w.png";
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
} else {
imageView = (ImageView) convertView;
}
Picasso.with(this.mContext).load(url).resize(100, 100).into(imageView);
Picasso.with(this.mContext).setLoggingEnabled(true);
return imageView;
}
// references to our images
public Integer[] mThumbIds = {
/*R.drawable.title_background,
R.drawable.title_background,
R.drawable.title_background, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
*/
};
}
gridgallery.java
package com.example.imran.myapp;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.squareup.picasso.Picasso;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* A simple {@link Fragment} subclass.
*/
public class gridgallery extends Fragment {
public gridgallery() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_gridgallery, null);
Myserver myserver = new Myserver();
postStringRequest(myserver.url+"/api/albums/getalbums.php",view);
return view;
// Inflate the layout for this fragment
//return inflater.inflate(R.layout.fragment_gridgallery, container, false);
}
public View postStringRequest(final String url,final View view){
//final View view = inflater.inflate(R.layout.fragment_gallery, null);
final TextView t = (TextView)view.findViewById(R.id.main_msg_gallery);
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(getContext());
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string
// LinearLayout linearLayout = (LinearLayout)view.findViewById(R.id.fragment_gallery);
//GridView gridView = (GridView)view.findViewById(R.id.fragment_gridgallery);
//gridView.setAdapter(new ImageAdapter(getContext()));
try {
JSONArray jsonObj = new JSONArray(response);
Myserver myserver = new Myserver();
for (int i=0;i<jsonObj.length();i++){
JSONObject c = jsonObj.getJSONObject(i);
//ImageView albumpic = new ImageView(getContext());
//Picasso.with(getContext()).load(myserver.url+"/images/thumbs/tn_"+c.getString("album_thumbnail")).centerCrop().resize(200,200).into(albumpic);
//linearLayout.addView(albumpic);
// gridView.addView(albumpic);
GridView gridView = (GridView) view.findViewById(R.id.fragment_gridgallery);
ImageAdapter myadap = new ImageAdapter(getContext());
myadap.url = myserver.url+"/images/thumbs/tn_"+c.getString("album_thumbnail");
gridView.setAdapter(myadap);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
t.setText("Server error - Unable to reach server");
Toast.makeText(getContext(), "Unable to reach server", Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("getalbum", "getalbum");
return params;
}
};
queue.add(stringRequest);
return view;
}
}
这是一个我最近在弄。有很多方法可以做到这一点,但是您将始终需要扩展/导入ListAdapter,这是所有ListViews类型的基础。以下是方法:
- 创建一个适配器,就像您在制作扩展ListAdapter的ListView或list-array时总是要做的那样。 (对我来说,我称它为GroupTileAdapater.java)
- 您必须为该图块创建自己的视图,就像为每个列表创建一样。对于我来说,我只是创建了一个布局,并使用imageview填充了整个视图,并且可以自定义任何你想要的内容(在res/layout中称为media_tile.xml)
- 然后,通过查找您在平铺图像视图中实例化的对应ID。 (通过调用毕加索的方法,你可以看看我最近公布的问题,Load image through picasso)
更具体地讲,你会覆盖从listAdapter,getCount将,的getItem,getItemId,getView,以及4种方法当设置适配器时,您会将图像列表传递给构造函数,并在getView中显示图像。
- 现在,您只需将适配器设置为您所在的任何片段/活动,并使用您已初始化GridView的任何布局。
我不知道你的URL类型是什么,但是如果它以文件/内容开始,请看下面的内容,contentUri:show image,并与picasso合并。那里有youtube视频,可以帮助你了解更多关于listAdapter的信息。希望能帮助到你!
谢谢。请看我编辑的问题并查看代码。在第二个文件中,我的循环运行多次。但是,无论循环运行图像显示多少次,我都会在'public Integer [] mThumbIds'中取消注释。 –
@ImranAslam图像显示吗?图像如何显示?你不是说你想要显示来自服务器的图像吗?那些没有注释的代码就变得没有必要了。看看这个例子,我认为你几乎在那里。 [baseAdapter示例](http://www.pcsalt.com/android/listview-using-baseadapter-android/) – xosuma
那不是我想要的。 –
谢谢你们的帮助,我终于明白了。
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c, String urls[]) {
mContext = c;
mThumbIds = urls;
//myurls = urls;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return position;
//return 0;
}
public String getURL(int position){
return mThumbIds[position];
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(20, 20, 20, 20);
} else {
imageView = (ImageView) convertView;
}
// imageView.setImageResource(mThumbIds[position]);
Picasso.with(mContext)
.load(mThumbIds[position])
.into(imageView);
return imageView;
}
//private ArrayList<String> myurls = new ArrayList<String>();
// references to our images
private String[] mThumbIds = {
};
}
gridgallery.java
(片段)
package com.example.imran.myapp;
public class gridgallery extends Fragment {
public gridgallery() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_gridgallery, null);
Myserver myserver = new Myserver();
postStringRequest(myserver.url + "/api/albums/getalbums.php", view);
return view;
}
public View postStringRequest(final String url,final View view){
//final View view = inflater.inflate(R.layout.fragment_gallery, null);
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(getContext());
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
GridView gv = (GridView)view.findViewById(R.id.fragment_gridgallery);
ArrayList<String> urls2 = new ArrayList<String>();
try {
JSONArray jsonObj = new JSONArray(response);
Myserver myserver = new Myserver();
for (int i=0;i<jsonObj.length();i++){
JSONObject c = jsonObj.getJSONObject(i);
String imgurl = myserver.url+"/images/thumbs/tn_"+c.getString("album_thumbnail");
urls2.add(imgurl);
}
String myabc[] = urls2.toArray(new String[urls2.size()]);
final ImageAdapter myadapter = new ImageAdapter(getContext(),myabc);
gv.setAdapter(myadapter);
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getContext(),myadapter.getURL(position),Toast.LENGTH_LONG).show();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getContext(), "Unable to reach server", Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("getalbum", "getalbum");
return params;
}
};
queue.add(stringRequest);
return view;
}
}
你有什么difficults,毕加索的使用? –
@IvanIvanov我没有找到你 –
我已经使用带有LinearLayout的Picasso而不是'GridView'。我想通过'GridView'使用毕加索从毕加索获取图像,并以编程方式将它们插入到'GridView'中。 –