마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

custom view 에 custom listener 질문.

0 추천

뷰 자체를 뷰그룹으로 상속받아서 만든상태입니다 .

 

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 메소드가 어디서 구현되고 어떻게 연결되어야 할지 도무지 감이 안와서요.

 

뷰 내부에 레이아웃이 있고 또 그내부에 뷰들이 자리를 하게 만들어서요 . 가장 최하위의 뷰의 상태값들을 받는 메서드를 정의를 해서 콜백해야하는대 미치겠습니다..

고수님들의 답변을 기다립니다. 부탁드려요 ~

구기웅 (1,110 포인트) 님이 2013년 8월 12일 질문
구기웅님이 2013년 8월 12일 수정

1개의 답변

0 추천
addImage() 메소드 내부에서

view 객체에 image 그린후에

onClick() 메소드 호출해서 구현했습니다.

혹시 이런문제로 고민하시는분들 도움되시길... 저같은사람이 있을지는 모르겠지만 ~ㅠ
구기웅 (1,110 포인트) 님이 2013년 8월 12일 답변
...