마스터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일 답변
...