package dellwon.ch4_Customview; import java.util.ArrayList; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class MyImageButton extends View{ private Context context; //À̺¥Æ® ¾Ë°í¸®ÁòÀ» À§ÇØ.. private boolean flag=true; private ArrayList listeners= new ArrayList(); public MyImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub this.context = context; } public MyImageButton(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.context = context; } public MyImageButton(Context context) { super(context); // TODO Auto-generated constructor stub this.context = context; } // Observer¸¦ µî·Ï ½ÃÅ°±âÀ§ÇÑ ¸Å¼­µå. ¸Å°³º¯¼ö ŸÀÔÀ¸·Î interface //¸¦ ÁöÁ¤ÇÏ¿´±â ¶§¹®¿¡ Oberver Ŭ·¡½º¿¡¼­ ÇØ´ç interface¸¦ ±¸ÇöÇÏ°Ô °­Á¦ ÇÑ´Ù. public void setOnMyActionListner(MyActionListner listener){ listeners.add(listener); } // È­¸é Ãâ·Â½Ã view¸¦ À§ÇÑ È­¸é ±×¸®±â À§ÇØ ÀÚµ¿ È£Ãâ.. protected void onDraw(Canvas canvas){ super.onDraw(canvas); Resources rs=context.getResources(); Drawable dr=null; dr=rs.getDrawable(R.drawable.kara_5); if(flag) { dr=rs.getDrawable(R.drawable.kara_5); } else { dr=rs.getDrawable(R.drawable.kara_4); } dr.setBounds(0,0,10+dr.getIntrinsicWidth(), 10+dr.getIntrinsicHeight()); dr.draw(canvas); } protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ int width=measureWidth(widthMeasureSpec); int height=measureHeight(widthMeasureSpec); setMeasuredDimension(width, height); } private int measureWidth(int measureSpec){ // measureSpecÀÇ °ªÀº size ¸¸À» À̾߱âÇÏÁö ¾Ê°í..size °áÁ¤À» //À§ÇÑ ¿©·¯Á¤º¸¸¦ ´ã´Â °ª int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); // »óÀ§¿¡¼­ È®º¸ÇÑ »çÀÌÁî ¹üÀ§³»¿¡¼­ ÀÚÀ¯·Ó°Ô °áÁ¤ÇßÀ¸¸é ÁÁ°Ú´Ù´Â ¸ðµå if(specMode == MeasureSpec.AT_MOST){ return specSize; } //»óÀ§¿¡¼­ ÁöÁ¤ÇÑ »çÀÌÁî¿¡ Á¤È®ÇÏ°Ô ¸Â°Ô °áÁ¤µÇ¾úÀ¸¸é ÁÁ°Ú´Ù´Â ¸ðµå else if(specMode == MeasureSpec.EXACTLY){ return specSize; } return specSize; } private int measureHeight(int measureSpec){ // measureSpecÀÇ °ªÀº size ¸¸À» À̾߱âÇÏÁö ¾Ê°í..size °áÁ¤À» //À§ÇÑ ¿©·¯Á¤º¸¸¦ ´ã´Â °ª int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); // »óÀ§¿¡¼­ È®º¸ÇÑ »çÀÌÁî ¹üÀ§³»¿¡¼­ ÀÚÀ¯·Ó°Ô °áÁ¤ÇßÀ¸¸é ÁÁ°Ú´Ù´Â ¸ðµå if(specMode == MeasureSpec.AT_MOST){ return specSize; } //»óÀ§¿¡¼­ ÁöÁ¤ÇÑ »çÀÌÁî¿¡ Á¤È®ÇÏ°Ô ¸Â°Ô °áÁ¤µÇ¾úÀ¸¸é ÁÁ°Ú´Ù´Â ¸ðµå else if(specMode == MeasureSpec.EXACTLY){ return specSize; } return specSize; } // ÅÍÄ¡ À̺¥Æ® ¹ß»ý½Ã ÀÚµ¿ È£Ãâ @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if(event.getAction()==MotionEvent.ACTION_DOWN){ flag=false; // È­¸éÀÌ ÀûÀýÄ¡ ¸øÇÏ´Ï onDraw¸¦ ´Ù½Ã È£ÃâÇ϶ó. invalidate(); // Observer¿¡°Ô À̺¥Æ® Àü´Þ int size = listeners.size(); for(int i = 0; i