뷰 자체를 뷰그룹으로 상속받아서 만든상태입니다 .
package com.test.horizontalgalleryview;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class HorizontalGalleryView extends HorizontalPagerView {
public static interface OnItemSelectedListener {
public void onItemSelected(int idx, Bitmap bitmap);
}
private Context context;
private OnItemSelectedListener listener = null;
ArrayList<Bitmap> imgs = new ArrayList<Bitmap>();
ArrayList<LinearLayout> layouts = new ArrayList<LinearLayout>();
private int max = 0;
public HorizontalGalleryView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
max = attrs.getAttributeIntValue(null, "max", 0); //이미지의 최대 갯수 xml에서 받아옴
addImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
addImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
addImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
addImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
addImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
addImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
}
public void addImage(Bitmap bitmap) {
imgs.add(bitmap);
int size = imgs.size()-1;
int layout_idx = size/max;
int img_idx = size%max;
if(layout_idx > layouts.size()-1) {
LinearLayout layout = new LinearLayout(context);
layout.setBackgroundColor(Color.GRAY);
layout.setOrientation(LinearLayout.HORIZONTAL);
for(int i = 0; i < max; i++){
ImageView img = new ImageView(context);
img.setId(i);
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,1);
img.setLayoutParams(param);
img.setAdjustViewBounds(true);
layout.addView(img);
}
addView(layout);
layouts.add(layout);
}
ImageView view = (ImageView)layouts.get(layout_idx).findViewById(img_idx);
view.setImageBitmap(bitmap);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int size = widthSize/max;
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY));
}
public void setOnItemSelectedListener(OnItemSelectedListener listener){
this.listener = listener;
}
}// end class
보시게 되면 리스너를 별도로 구현해놨는대요 외부에서 결국 선택된 imageView 의 index값과 Bitmap 객체를 받도록 만들어야 합니다 .
삽질은 계속 하고 있는대 . callback 메소드가 어디서 구현되고 어떻게 연결되어야 할지 도무지 감이 안와서요.
뷰 내부에 레이아웃이 있고 또 그내부에 뷰들이 자리를 하게 만들어서요 . 가장 최하위의 뷰의 상태값들을 받는 메서드를 정의를 해서 콜백해야하는대 미치겠습니다..
고수님들의 답변을 기다립니다. 부탁드려요 ~