6

json에서 이미지를 가져 오는 gridview입니다. 그리고 그것은 잘 작동합니다. 전체 이미지를 표시하려면이 gridview의 이미지를 클릭하고 슬라이드 할 수 있습니다. 이 문제의 해결책은 Viewpager를 사용하는 것으로 나타났습니다.Gridview - Viewpager에서 이미지를 보려면 이미지를 클릭하십시오.

이미지를 표시하기 위해 gridview에서 이미지를 클릭하고 슬라이드 할 수 있습니까?

이 코드를 더 쉽게 읽을 수 있습니다. enter image description here

public class MainActivity extends Activity { 

public static final int DIALOG_DOWNLOAD_JSON_PROGRESS = 0; 
private ProgressDialog mProgressDialog; 
ArrayList<HashMap<String, Object>> MyArrList; 

@SuppressLint("NewApi") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Permission StrictMode 
    if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
    // Download JSON File 
    new DownloadJSONFileAsync().execute(); 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DIALOG_DOWNLOAD_JSON_PROGRESS: 
     mProgressDialog = new ProgressDialog(this); 
     mProgressDialog.setMessage("Downloading....."); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     mProgressDialog.setCancelable(true); 
     mProgressDialog.show(); 
     return mProgressDialog; 
    default: 
     return null; 
    } 
} 

public void ShowAllContent() { 
    final GridView gridView1 = (GridView) findViewById(R.id.gridView1); 
    gridView1.setAdapter(new ImageAdapter(MainActivity.this, MyArrList)); 
    gridView1.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      Toast.makeText(getApplicationContext(), "this is", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

public class ImageAdapter extends BaseAdapter { 
    private Context context; 
    private ArrayList<HashMap<String, Object>> MyArr = new ArrayList<HashMap<String, Object>>(); 

    public ImageAdapter(Context c, ArrayList<HashMap<String, Object>> myArrList) { 
     context = c; 
     MyArr = myArrList; 
    } 

    public int getCount() { 
     return MyArr.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 
     View myView = convertView; 
     viewHolder = new ViewHolder(); 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      myView = inflater.inflate(R.layout.activity_column, null); 

      viewHolder.imageView = (ImageView) myView.findViewById(R.id.ColImgPath); 
      viewHolder.imageView.getLayoutParams().height = 120; 
      viewHolder.imageView.getLayoutParams().width = 120; 
      viewHolder.imageView.setPadding(5, 5, 5, 5); 
      viewHolder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      try { 
       viewHolder.imageView.setImageBitmap((Bitmap) MyArr.get(position).get("ImageThumBitmap")); 
      } catch (Exception e) { 
       viewHolder.imageView.setImageResource(android.R.drawable.ic_menu_report_image); 
      } 
     } 
     return myView; 
    } 
} 

private static class ViewHolder { 
    public ImageView imageView; 
} 

// Download JSON in Background 
public class DownloadJSONFileAsync extends AsyncTask<String, Void, Void> { 

    protected void onPreExecute() { 
     super.onPreExecute(); 
     showDialog(DIALOG_DOWNLOAD_JSON_PROGRESS); 
    } 

    @Override 
    protected Void doInBackground(String... params) { 

     String url = "http://192.168.10.101/adchara1/"; 
     JSONArray data; 
     try { 
      data = new JSONArray(getJSONUrl(url)); 
      MyArrList = new ArrayList<HashMap<String, Object>>(); 
      HashMap<String, Object> map; 

      for (int i = 0; i < data.length(); i++) { 
       JSONObject c = data.getJSONObject(i); 
       map = new HashMap<String, Object>(); 

       map.put("photo", (String) c.getString("photo")); 
       map.put("ImageThumBitmap",(Bitmap) loadBitmap(c.getString("photo"))); 

       // Full (for View Popup) 
       map.put("frame", (String) c.getString("frame")); 

       MyArrList.add(map); 
      } 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(Void unused) { 
     ShowAllContent(); // When Finish Show Content 
     dismissDialog(DIALOG_DOWNLOAD_JSON_PROGRESS); 
     removeDialog(DIALOG_DOWNLOAD_JSON_PROGRESS); 
    } 
} 

/*** Get JSON Code from URL ***/ 
public String getJSONUrl(String url) { 
    StringBuilder str = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet(url); 
    try { 
     HttpResponse response = client.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { // Download OK 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       str.append(line); 
      } 
     } else { 
      Log.e("Log", "Failed to download file.."); 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return str.toString(); 
} 

/***** Get Image Resource from URL (Start) *****/ 
private static final String TAG = "Image"; 
private static final int IO_BUFFER_SIZE = 4 * 1024; 

public static Bitmap loadBitmap(String url) { 
    Bitmap bitmap = null; 
    InputStream in = null; 
    BufferedOutputStream out = null; 

    try { 
     in = new BufferedInputStream(new URL(url).openStream(),IO_BUFFER_SIZE); 

     final ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); 
     out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE); 
     copy(in, out); 
     out.flush(); 

     final byte[] data = dataStream.toByteArray(); 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     // options.inSampleSize = 1; 

     bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options); 
    } catch (IOException e) { 
     Log.e(TAG, "Could not load Bitmap from: " + url); 
    } finally { 
     closeStream(in); 
     closeStream(out); 
    } 
    return bitmap; 
} 

private static void closeStream(Closeable stream) { 
    if (stream != null) { 
     try { 
      stream.close(); 
     } catch (IOException e) { 
      android.util.Log.e(TAG, "Could not close stream", e); 
     } 
    } 
} 

private static void copy(InputStream in, OutputStream out) 
     throws IOException { 
    byte[] b = new byte[IO_BUFFER_SIZE]; 
    int read; 
    while ((read = in.read(b)) != -1) { 
     out.write(b, 0, read); 
    } 
} 
} 

답변

2

그 같은 완전한 소스 코드를 다운로드 할 수 있습니다. 그리드 뷰의 이벤트를 클릭하고 뷰 페이저를 사용하여 다음 화면에서 이미지를 가져옵니다. 그리드 뷰 이미지의

Click 이벤트 :

GridView gridView = (GridView) findViewById(R.id.gridview); 
     gridView.setAdapter(new ImageAdapter()); 
     gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) 
     { 
      HashMap<String, Object> selected = (HashMap<String, Object>) 

      gridView.getItemAtPosition(position); 

      } 
     }); 
2

http://pastebin.com/Q8Ljt9yL 우선 당신이 '인 myArr에서 "위치"에있는 항목을 반환하는 방법의 getItem (INT 위치) ImageAdapter를 구현하는 모든. 다음, 클릭 리스너에, 당신은 당신이 당신의 비트 맵을 선택한 상태

HashMap<String, Object> selected = (HashMap<String, Object>) gridView.getItemAtPosition(position); 

처럼 뭔가를 할 수 있습니다.

+0

할 수있는 자세한 내용을 다운로드하려면 다음 URL을 사용

myView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { HashMap<String, Object> result = new HashMap<String, Object>(); result = MyArr.get(position); Intent intent = new Intent(context, youractivitytarget.class); intent.putExtra("photo", (String)result.get(MainActivity.PHOTO)); context.startActivity(intent); } }); 

MYVIEW

에 onclick을 사용해보십시오. 나는 하나의 Activity 클래스와 레이아웃을 만들어야한다는 것을 알고있다. 하지만 코드 작성법을 모르겠습니다. – kongkea

+1

onItemClickListener에 대한 코드를 작성할 수 있으며 Viewpager 클래스 – kongkea

2

는 여기

GridView gridView = (GridView) findViewById(R.id.gridview); 
     gridView.setAdapter(new ImageAdapter()); 
     gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       startImageGalleryActivity(position); 
      } 
     }); 

당신은 당신이 원하는 것을 같은 출력을 얻을 것이다 찾을 수있는이 class 참조하십시오.

당신은 또한 당신이 필요로하는 here

+1

링크가 작동하지 않는 경우이 문제를 해결하십시오. –

0

는 이미지의 URL입니다?

-> map.put("photo", (String) c.getString("photo"));//on your main activity 

은 클릭 사진을보다 다시

관련 문제