2016-03-28 91 views
0

我正在从一个项目中,我从数据库中动态获取图像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; 
    } 



} 
+0

你有什么difficults,毕加索的使用? –

+0

@IvanIvanov我没有找到你 –

+0

我已经使用带有LinearLayout的Picasso而不是'GridView'。我想通过'GridView'使用毕加索从毕加索获取图像,并以编程方式将它们插入到'GridView'中。 –

回答

1

这是一个我最近在弄。有很多方法可以做到这一点,但是您将始终需要扩展/导入ListAdapter,这是所有ListViews类型的基础。以下是方法:

  1. 创建一个适配器,就像您在制作扩展ListAdapter的ListView或list-array时总是要做的那样。 (对我来说,我称它为GroupTileAdapater.java)
  2. 您必须为该图块创建自己的视图,就像为每个列表创建一样。对于我来说,我只是创建了一个布局,并使用imageview填充了整个视图,并且可以自定义任何你想要的内容(在res/layout中称为media_tile.xml)
  3. 然后,通过查找您在平铺图像视图中实例化的对应ID。 (通过调用毕加索的方法,你可以看看我最近公布的问题,Load image through picasso

更具体地讲,你会覆盖从listAdapter,getCount将,的getItem,getItemId,getView,以及4种方法当设置适配器时,您会将图像列表传递给构造函数,并在getView中显示图像。

  1. 现在,您只需将适配器设置为您所在的任何片段/活动,并使用您已初始化GridView的任何布局。

我不知道你的URL类型是什么,但是如果它以文件/内容开始,请看下面的内容,contentUri:show image,并与picasso合并。那里有youtube视频,可以帮助你了解更多关于listAdapter的信息。希望能帮助到你!

+0

谢谢。请看我编辑的问题并查看代码。在第二个文件中,我的循环运行多次。但是,无论循环运行图像显示多少次,我都会在'public Integer [] mThumbIds'中取消注释。 –

+0

@ImranAslam图像显示吗?图像如何显示?你不是说你想要显示来自服务器的图像吗?那些没有注释的代码就变得没有必要了。看看这个例子,我认为你几乎在那里。 [baseAdapter示例](http://www.pcsalt.com/android/listview-using-baseadapter-android/) – xosuma

+0

那不是我想要的。 –

0

谢谢你们的帮助,我终于明白了。

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; 
    } 



}