posted by By훈트 2010.07.24 18:21

열거타입 (enum)

 

열거타입도 하나의 클래스 처럼 인식한다.

'enum' 키워드를 삽입해야 하며, String 타입의 필드를 선언해야 한다.

이 때 final private 키워드를 붙여서 선언해야 한다.

열거 타입은 클래스 형식과 유사하다.

다만, 열거 타입의 열거 값은 상수 필드로 만들어 진다. (열거 값은 대문자로 선언)

또한, 열거타입은 클래스처럼 객체 생성이 불가능하다.



 enum Season
{
 SPRING("봄"), SUMMER("여름"), FALL("가을"), WINTER("겨울");
 final private String name;

 Season(String part) {
  name = part;
 }

 String returnName() {                         // name 변수가 private이기 때문에 리턴시켜야 함
  return name;
 }
}

  

class Test
{
 public static void main(String ar[]) {
  show(Season.SPRING);
  show(Season.WINTER);
 }

 static void show(Season season) {
  System.out.println(season.returnName());
 }
}

    

posted by By훈트 2010.07.23 12:19

 

리소스에서 bitmap을 읽어오고 화면에 출력한 후 touch를 이용해서 drag하는 예제

package com.jjihun.bitmaptest;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class BitmapView extends View {
 Bitmap bitmap;
 int width;
 int height;
 int dx;
 int dy;
 public BitmapView(Context context, AttributeSet attrs) {
  super(context, attrs);

  bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.yuandi);
  // 얘 뒤져보면 byte[] 에서 bitmap생성하는 것도 있심

  width = bitmap.getWidth();
  height = bitmap.getHeight();
 }

 @Override
 protected void onDraw(Canvas canvas) {
  canvas.drawBitmap(
     bitmap, // 출력할 bitmap
     new Rect(0,0,width,height),   // 출력할 bitmap의 지정된 영역을 (sub bitmap)
     new Rect(dx,dy,dx+width,dy+height),  // 이 영역에 출력한다. (화면을 벗어나면 clipping됨)
     null);

  super.onDraw(canvas);
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  
  switch(event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   break;
  case MotionEvent.ACTION_UP:
   break;
  case MotionEvent.ACTION_MOVE:
// 주루룩 drag했을 경우 히스토리가 모두 기록되어서 전달됨
   int length=event.getHistorySize();
   float sx, sy, ex, ey;
   
   if (length != 0) {
    sx = event.getHistoricalX(0);
    sy = event.getHistoricalY(0);
    ex = event.getHistoricalX(length-1);
    ey = event.getHistoricalY(length-1);

    dx += (int)(ex-sx);
    dy += (int)(ey-sy);
   }
   invalidate();
   break;
  }
  
  return true;
 }
}


posted by By훈트 2010.07.22 11:55

1) 비율을 정확히 고정시키고 싶을 때는

자체 테이블을 그리거나 할 때 TableLayout을 사용하면 알아서 늘어나고 줄어드는 컬럼 때문에 정신건강에 좋지 않다. 이럴 때는 LinearLayout을 이용해서 android:layout_width를 0px로 변경하고, weight로 비율을 고정하면 늘어나고 줄어들지 않게 고정시킬 수 있다. 정확히 나뉜 컬럼이 필요하거나 할 때는 이 방법을 이용한다. 단, 이렇게 나뉘는 영역에는 당연하겠지만 margin이 포함되지 않으니 margin을 함부로 사용하면 어그러진다. padding을 잘 활용해야 한다.

 

  1. android:layout_width="0px"
    android:layout_height="wrap_content"
  2. android:layout_weight="0.25"