본문 바로가기

Android/Custom Tab example

Android Custom Tab example

선택한 탭에 적색 원이 나타나게 하는 예

사용자 삽입 이미지





프로그램 구성은 앞의 예와 동일하고 커스텀 뷰 파일인 MyView.java 만 아래와 같이 약간만 변경하였다.


MyView.java

package com.dearpeople.android.test.custom;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
/*
 * 사각형 3개를 그리고 사각형을 누를 때마다 눌린 사각형안에 적색 원을 그리고,
 * 다른 사각형은 흰색으로 설정하는 예제
 * 이 클래스를 좀더 확장하여 커스텀 탭으로 사용할 수도 있겠다.
 * 이 뷰를 화면에 다수개 출력하려면 레이아웃 xml 파일에 다수개를 선언해 주면 된다.
 */

public class MyView extends View{

 int onColor = Color.WHITE; //사각형의 바탕색을 설정할 때 사용됨
 // 이 클래스의 객체가 다수개 생성되어 사용될 때 아래의 컬렉션에 참조를 저장해 두면
 // 각 객체의 바탕색을 일괄적으로 설정할 수 있기 때문에 커스텀 탭을 구현할 때 응용할 수 있다.
 static ArrayList<MyView> aList;
 
  public MyView(Context context) {
   super(context);
   if(aList==null) aList = new ArrayList<MyView>();
   aList.add(this);
  }
 
  /* xml 레이아웃파일에서 이 뷰를 사용하려면 이 생성자가 반드시 필요함*/
  public MyView(Context context, AttributeSet attrs) {
   super(context, attrs);
   if(aList==null) aList = new ArrayList<MyView>();
   aList.add(this);
  }
 
  /* 버튼으로 사용할 사각형을 그린다 */
  @Override
  protected void onDraw(Canvas canvas) {
 canvas.drawColor(Color.WHITE);//바탕색 설정
 Paint paint = new Paint();
 paint.setStyle(Paint.Style.STROKE); //Paint.Style.FILL(속을 채운다)
 paint.setColor(Color.BLACK);
 paint.setStrokeWidth(1);
 paint.setAntiAlias(true);
 canvas.drawRect(0, 0, 100, 20, paint);
 
 paint.setColor(onColor);
 paint.setStyle(Paint.Style.FILL);
 canvas.drawCircle(50, 10, 7, paint);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   setMeasuredDimension(100, 20);
  }

  /* 사각형을 누를 때마다 눌린 사각형에는 적색 원이 그려지고, 다른 사각형은 흰색으로 설정한다 */
 @Override
 public boolean onTouchEvent(MotionEvent event) {

  //Toast.makeText(this.getContext(), "터치이벤트", Toast.LENGTH_SHORT).show();
  onColor = Color.RED;
  this.invalidate();
  for(int i=0;i<aList.size();i++){
   MyView v = aList.get(i);
   if(v!=this){
    v.onColor = Color.WHITE;
    v.invalidate();
   }
  }
  return super.onTouchEvent(event);
 }

}