«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

올해는 머신러닝이다.

갤러리를 이용한 페이지 컨트롤 구현 본문

Android/Tip&Tech

갤러리를 이용한 페이지 컨트롤 구현

행복한 수지아빠 2011. 5. 11. 19:03

출처 : http://micropilot.tistory.com/1588

Android 에서 Gallery 위젯을 사용하는 예제
Gallery 상에서 중앙에 위치하는 이미지의 위치를 확인하여 Gallery 하단에 표시하는 기능을 추가해 보았다.

사용자 삽입 이미지


사용된 이미지들
 images.zip


res/values/attrs.xml

<?xml version="1.0" encoding="utf-8"?> 

<resources>  
 <declare-styleable name="GalleryTheme">  
  <attr name="android:galleryItemBackground" /> 
 </declare-styleable>
</resources>





res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="#ffffff">
    
 <TextView  
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" />
     
 <Gallery
  android:id="@+id/gallery"    
  android:layout_width="fill_parent"    
  android:layout_height="wrap_content"/>
  
 <LinearLayout
  android:id="@+id/dotPanel"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="center">

 </LinearLayout>
  
</LinearLayout>




GalleryTestActivity.java

package com.dearpeople.android.test.gallery;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout.LayoutParams;

public class GalleryTestActivity extends Activity {
    /** Called when the activity is first created. */
 
 ImageView [] imageView;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {    
     super.onCreate(savedInstanceState);    
     setContentView(R.layout.main);
     
     Gallery g = (Gallery) findViewById(R.id.gallery);    
     g.setAdapter(new ImageAdapter(this));    
     
     g.setOnItemClickListener(new AdapterView.OnItemClickListener() {        
      public void onItemClick(AdapterView parent, View v, int position, long id) {            
       //클릭된 경우에 실행됨
       //Fling시에는 실행안됨

      }    
     });
     /* Gallery 중앙의 아이템(선택된 아이템)이 변경되면 실행됨 */
     g.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    /* 첫번째 아이템이 선택된 경우 arg2의 값은 0 이다 */
    //Log.i("Gallery Event", "Gallery Current Viewing Item "+arg2);

    selectDot(arg2);
   }

   @Override
   public void onNothingSelected(AdapterView<?> arg0) {
   }
  });
     LinearLayout layout = (LinearLayout)findViewById(R.id.dotPanel);
     /* Gallery하단의 위치를 표시하는 작은 원의 갯수를 지정하여 그린다 */
     createDotPanel(this,layout,10);
    }
    
    private void createDotPanel(Context context, LinearLayout layout, int count){
     imageView = new ImageView[count];
     for(int i=0;i<count;i++){
      imageView[i] = new ImageView(context);
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, 0);
      params.width = LayoutParams.WRAP_CONTENT;
      params.height = LayoutParams.WRAP_CONTENT;
      params.leftMargin= 25;
      params.gravity = Gravity.CENTER;
      imageView[i].setLayoutParams(params);
      imageView[i].setImageResource(R.drawable.gray_circle);
      layout.addView(imageView[i]);
     }
    }
    
    private void selectDot(int position){
     for(int i=0;i<imageView.length;i++){
      if(i==position) imageView[i].setImageResource(R.drawable.black_circle);
      else imageView[i].setImageResource(R.drawable.gray_circle);
     }
    }
}




ImageAdapter.java

package com.dearpeople.android.test.gallery;

import android.content.*;
import android.content.res.*;
import android.view.*;
import android.widget.*;

public class ImageAdapter extends BaseAdapter {    
 int mGalleryItemBackground;    
 private Context mContext;    
 private Integer[] mImageIds = {            
   R.drawable.images01,            
   R.drawable.images02,            
   R.drawable.images03,            
   R.drawable.images04,            
   R.drawable.images05,            
   R.drawable.images06,            
   R.drawable.images07,
   R.drawable.images08,
   R.drawable.images09,
   R.drawable.images10
   };    
 public ImageAdapter(Context c) {        
  mContext = c;        
  TypedArray a = c.obtainStyledAttributes(R.styleable.GalleryTheme);        
  mGalleryItemBackground = a.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0);       
  a.recycle();    
 }    
 public int getCount() {        
   return mImageIds.length;    
 }    
 public Object getItem(int position) {        
  return position;    
 }    
 public long getItemId(int position) {        
  return position;    
 }    
 public View getView(int position, View convertView, ViewGroup parent) {        
  ImageView i = new ImageView(mContext);        
  i.setImageResource(mImageIds[position]);        
  i.setLayoutParams(new Gallery.LayoutParams(250, 200));        
  i.setScaleType(ImageView.ScaleType.FIT_XY);        
  i.setBackgroundResource(mGalleryItemBackground );        
  return i;    
 }
}