소스코드
/ **************GalleryDetailActivity .java*******************/
package com.ireal.sc;
import java.util.ArrayList;
import com.ireal.SC;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class GalleryDetailActivity extends Activity implements OnClickListener{
private Context mContext = null;
private final int imgWidth = 320;
private final int imgHeight = 372;
Button button_left;
Button button_right;
ArrayList<String> imgPaths;
String imgPath;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_detail);
mContext = this;
button_left = (Button)findViewById(R.id.gallery_left);
button_right = (Button)findViewById(R.id.gallery_right);
button_left.setOnClickListener(this);
button_right.setOnClickListener(this);
/** 전송메시지 */
Intent i = getIntent();
Bundle extras = i.getExtras();
imgPath = extras.getString("filename");
imgPaths = extras.getStringArrayList("gallery");
/** 완성된 이미지 보여주기 */
setImg(imgPath);
/** 리스트로 가기 버튼 */
for(int ia =0; ia<imgPaths.size();ia++)
{
Log.i("imgPath ", ""+(ia+1)+imgPaths.get(ia));
}
}
private void setImg(String imgPath)
{
BitmapFactory.Options bfo = new BitmapFactory.Options();
ImageView iv = (ImageView)findViewById(R.id.imageView);
Bitmap bm = BitmapFactory.decodeFile(SC.DIR_PATH+"/"+imgPath);
iv.setImageBitmap(bm);
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
int currentPosition=0;
for(int i =0;i<imgPaths.size();i++)
{
if(imgPath.equals(imgPaths.get(i)))
{
currentPosition=i;
break;
}//그니깐 사진 10개있으면 잠만예예가있을건데
}
if(v.getId()==R.id.gallery_left)
{
if(currentPosition==0)
{
currentPosition=imgPaths.size()-1;
}
else
{
currentPosition--;
}
}
else if(v.getId()==R.id.gallery_right)
{
if(currentPosition==imgPaths.size()-1)
{
currentPosition=0;
}
else
{
currentPosition++;
}
}
String newImgPath = imgPaths.get(currentPosition);
imgPath = newImgPath;
setImg(newImgPath);
}
}
/*************Gallery2Activity.java***********************/
package com.ireal.sc;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import org.apache.http.util.ByteArrayBuffer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import com.ireal.SC;
import com.ireal.log.Logger;
import com.ireal.xml.Node;
import com.ireal.xml.kXML2Parser;
public class Gallery2Activity extends Activity {
private ProgressDialog progressDialog;
final private int PROGRESS_DIALOG = 0;
private boolean flag = false;
private Context mContext;
private ArrayList<Gallery> mList ;
private Handler handler = new Handler();
private GridView gridview;
private GalleryAdapter ga ;
private final int PIXEL = 100;
@Override
public void onCreate(Bundle savedInstanceState){
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
mContext = this;
Thread thread = new Thread(null, init);
thread.start();
showDialog(PROGRESS_DIALOG);
if(flag == true){
}
}
private Runnable init = new Runnable() {
int mResponseCode;
@Override
public void run() {
getGalleryList();
}
};
private void getGalleryList(){
FileInputStream in = null;
URL url;
URLConnection urlConn = null;
InputStream is = null;
String strXML = new String();
StringBuffer sb = new StringBuffer();
int mResponseCode;
mList = new ArrayList<Gallery>();
ConnectivityManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
// 3G 를 사용하는지 확인힌다.
boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
// WIFI 를 사용하는지 확인한다.
boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
// 3G 와 WIFI 중 어떤 네트워크를 사용하지는 화면에 보여준다.
if(is3g || isWifi){
wifi3g.sendEmptyMessage(0);
try{
url = new URL("http://"+SC.SERVER_ADDRESS+"/gallery.action?pages=get.gallery.list");
urlConn = url.openConnection();
HttpURLConnection huc = (HttpURLConnection)urlConn;
huc.setReadTimeout(1500);
mResponseCode = huc.getResponseCode();
if(mResponseCode != HttpURLConnection.HTTP_OK){
disconnectedHandler.sendEmptyMessage(0);
}
is = urlConn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
if(br != null){
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
while((strXML = br.readLine())!= null){
sb.append(strXML);
}
}
if(sb.length() > 0){
Node node = new kXML2Parser().parse(sb.toString());
Gallery gallery;
for(int i = 0 ; i<node.getNNodes();i++){
Node n = node.getNode(i);
if(n.getName().equals("gallery")){
gallery = new Gallery();
for(int j = 0 ; j<n.getNNodes();j++){
Node nn = n.getNode(j);
if (nn.getName().equals("title")) {
gallery.setTitle(nn.getValue());
}else if (nn.getName().equals("url")) {
gallery.setUrl(nn.getValue());
File file = new File(SC.DIR_PATH+"/"+gallery.getUrl());
if(!file.exists()){
URL urls = new URL("http://"+SC.SERVER_ADDRESS+"/files/gallery/"+gallery.getUrl());
URLConnection ucon = urls.openConnection();
BufferedInputStream bis = new BufferedInputStream(ucon.getInputStream());
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.close();
bis.close();
}else{
Logger.debug(gallery.getUrl() + " is exists");
}
}
}
mList.add(gallery);
}
}
flag=true;
}
if(flag == true){
Logger.debug("true");
handler.post(updateResults);
}
}catch(Exception e){
Logger.error(e);
finish();
} finally{
Logger.debug("Thread finally");
if(is != null) try {is.close();} catch (Exception e) {}
}
}else{
no_wifi3g.sendEmptyMessage(0);
handler.post(updateResults);
// Toast.makeText(Gallery2Activity.this, "3g wifi 사용안함", Toast.LENGTH_SHORT).show();
File file= new File(SC.DIR_PATH);
File[] listFile = file.listFiles();
for(File tempList:listFile){
if(tempList.getName().startsWith("gallery") && tempList.getName().endsWith(".jpg")){
Gallery gallery = new Gallery();
gallery.setUrl(tempList.getName());
mList.add(gallery);
}
}
}
}
private Runnable updateResults = new Runnable() {
public void run () {
Logger.debug("checking updateResults");
progressDialog.dismiss();
// GalleryActivity.this.removeDialog(PROGRESS_DIALOG);
// gridview.setAdapter(new GalleryAdapter(GalleryActivity.this, R.layout.gallery_img, mList));
// gridview.setAdapter(new GalleryAdapter(mContext));
gridview = (GridView) findViewById(R.id.grid);
ga = new GalleryAdapter(mContext);
gridview.setAdapter(ga);
gridview.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
ga.callImageViewer(position);
}
});
registerForContextMenu(gridview);
}
};
private Handler disconnectedHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Logger.debug("disconnectionHandler : "+msg.toString());
Toast.makeText(Gallery2Activity.this, "네트워크를 확인 하세요.", Toast.LENGTH_LONG).show();
}
};
private Handler no_wifi3g = new Handler(){
@Override
public void handleMessage(Message msg) {
Logger.debug("no_wifi3g : "+msg.toString());
}
};
private Handler wifi3g = new Handler(){
@Override
public void handleMessage(Message msg) {
Logger.debug("wifi3g : "+msg.toString());
}
};
private class GalleryAdapter extends BaseAdapter{
GalleryAdapter(Context c){
Logger.debug("GalleryAdapter()");
mContext = c;
}
////////// 이미지 클릭 시 전체 화면으로 이동 ////////////////////////////////////////
public final void callImageViewer(int selectedIndex) /////
{ /////
Intent i = new Intent(mContext, GalleryDetailActivity.class); /////
String imgPath = mList.get(selectedIndex).getUrl(); /////
i.putExtra("filename", imgPath); /////
ArrayList<String> imgPaths = new ArrayList<String>(); /////
for(int a = 0;a<mList.size();a++) /////
{ /////
imgPaths.add(mList.get(a).getUrl()); /////
} /////
i.putStringArrayListExtra("gallery", imgPaths); /////
startActivityForResult(i, 1); /////
} /////
/////////////////////////////////////////////////////////////////////////////
public boolean deleteSelected(int index){
return true;
}
public int getCount(){
return mList.size();
}
public Object getItem(int position){
return position;
}
public long getItemId(int position){
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
Logger.debug("GalleryAdapter getView()");
ImageView imageView = (ImageView) convertView; ;
if(convertView == null){
imageView = new ImageView(mContext);
imageView.setAdjustViewBounds(true);
imageView.setMaxWidth(PIXEL);
imageView.setMaxHeight(PIXEL);
imageView.setLayoutParams(new GridView.LayoutParams(PIXEL,PIXEL));
}
BitmapFactory.Options bo = new BitmapFactory.Options();
bo.inSampleSize = 8;
// Bitmap bmp = BitmapFactory.decodeFile(thumbsDataList.get(position), bo);
Bitmap bmp = BitmapFactory.decodeFile(SC.DIR_PATH+"/"+mList.get(position).getUrl(),bo);
Bitmap resized = Bitmap.createScaledBitmap(bmp, PIXEL, PIXEL, true);
imageView.setImageBitmap(resized);
// imageView.setImageBitmap(bmp);
return imageView;
}
}
// Menu Button Function
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.gallery_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.gallery_update: // gallery list update
getGalleryList();
return true;
default :
return super.onOptionsItemSelected(item);
}
}
private class Gallery{
private String no;
private String title;
private String url;
public String getNo(){
return no;
}
public void setNo(String no){
this.no = no;
}
public String getTitle(){
return title;
}
public void setTitle(String title){
this.title = title;
}
public String getUrl(){
return url;
}
public void setUrl(String url){
this.url = url;
}
}
//다이얼로그
protected Dialog onCreateDialog(int id) {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("캠퍼스 포토 Loading...... ");
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(true);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
return progressDialog;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
// TODO Auto-generated method stub
switch (id) {
case (PROGRESS_DIALOG):
AlertDialog mItemDialog = (AlertDialog) dialog;
mItemDialog.setTitle("Loading......");
break;
}
}
}