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"

 

posted by By훈트 2010.07.21 18:00
안 드로이드에는 얼굴 인식 기능이 내장되어 있습니다. FaceDetector Class가 바로 이미지를 분석하여 얼굴을 찾아내는 역할을 하는 클래스입니다. 얼굴 인식 기능은 이미지를 사용하는 다양한 애플리케이션에서 활용 가능 하고 간단히 사용할 수 있으므로 참고하세요.

FaceDetector.Face[] faces = new FaceDetector.Face[10];     // 최대 인식할 얼굴수 설정
FaceDetector detector = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), faces.length);
int numFaces = detector.findFaces(bitmap, faces);     // 얼굴 인식 실행
for(FaceDetector.Face face : faces) {
    PointF midPoint = new PointF();
    face.getMidPoint(midPoint);            //눈과 눈사의 가운데 지점
    float eyesDistance = face.eyesDistance();    //눈과 눈사이의 거리
    //처리.
}

더 많은 샘플 소스는 아래의 사이트들을 참고하세요.
- http://d.hatena.ne.jp/bols-blue/20090818/1250562668
- http://blog.livedoor.jp/deeds_not_words/archives/624855.html
- http://www.anddev.org/quick_and_easy_facedetector_demo-t3856.html


펌 : http://www.androidpub.com/android_dev_info/22845
posted by By훈트 2010.07.20 13:12
 
  1. CustomView의 생성과정은 점,선,면의 생성과정과 동일하다
  2. Sample ( Canvas에 출력하기 / Canvas에 궤적추적출력 활용 )
  3. Path는 drawPath, drawTextOnPath와 같이 궤적을 따라 출력하기 위한 객체이다
  4. 벡터정보를 저장하고 궤적을 출력하는등 활용도가 다양하다
  5. 관련 메서드
    1. void addArc(RectF oval, float startAngle, float sweepAngle) : 호의 추가
    2. void addCircle(float x, float y, float radius, Path.Direction dir) : 원의 추가
    3. void addOval(RectF oval, Path.Direction dir)  : 타원의 추가
    4. void addPath(Path src, Matrix matrix) : 행렬이 적용되는 Path의 추가
      1. (Path src)
      2. (Path src, float dx, float dy)
    5. void addRect(RectF rect, Path.Direction dir) : 사각형 추가
      1. (float left, float top, float right, float bottom, Path.Direction dir)
    6. void addRoundRect(RectF rect, float[] radii, Path.Direction dir) :모따진 사각형추가
      1. (RectF rect, float rx, float ry, Path.Direction dir)
    7. void arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo)  : 호의 추가
      1. (RectF oval, float startAngle, float sweepAngle)
    8. void close() : 현 궤적의 종료
    9. void computeBounds(RectF bounds, boolean exact) : Path point의 영역산출
    10. void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3) : 베지어 공식의 곡선  
      1. rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3) : 상대좌표사용       
    11. Path.FillType getFillType()  : 현 Path 채우기모드의 반환
    12. void incReserve(int extraPtCount) : Hint to the path to prepare for adding more points.
    13. boolean isEmpty() : 정보가 없는 경우 true를 반환
    14. boolean isInverseFillType()  : 반대변형이 가능한가를 판단
    15. boolean isRect(RectF rect) : 영역의 정보가 사각형인가를 판단
    16. void lineTo(float x, float y) : 마지막 Path에서 선그리기 추가
      1. rLineTo(float dx, float dy)  : 상대좌표 사용
    17. void moveTo(float x, float y) : 좌표이동 추가
      1. rMoveTo(float dx, float dy) : 상대좌표사용
    18. void offset(float dx, float dy) : Offset the path by (dx,dy), returning true on success
      1. (float dx, float dy, Path dst)
    19. void quadTo(float x1, float y1, float x2, float y2)  :
      1. Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2).
      2. rQuadTo(float dx1, float dy1, float dx2, float dy2) : 상대좌표사용
    20. void reset() : Path정보를 Empty로 만들기
    21. void rewind() : 라인, 커브는 지우고, 내부정보는 다시 사용하는 방법
    22. void set(Path src) : 정보의 수정
    23. void setFillType(Path.FillType ft) : 채우기 지정
    24. void setLastPoint(float dx, float dy) : 최종좌표의 변경
    25. void toggleInverseFillType() : 채우기의 반대모드로 변환하기
    26. void transform(Matrix matrix) : 행렬로 변형하기
      1. transform(Matrix matrix, Path dst)
  6. 사용 순서
    1. public void onDraw(Canvas canvas)에서 사용
      1. Path path = new Path();
      2. Paint paint = new Paint(); // Path출력도 Paint의 정보에 준한다
      3. paint정보 Setting 하기
      4. path정보 만들기
      5. canvas.drawPath( path, paint ) // Path 출력하기
        1. canvas.drawTextOnPath( string, path, 0, 0, paint) // 곡선, 원등에 문자출력하기
posted by By훈트 2010.07.20 10:16

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectToByte {

public byte[] convert(Object obj) throws IOException {
ObjectOutputStream os = null;

ByteArrayOutputStream byteStream = new ByteArrayOutputStream(5000);
os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
os.flush();
os.writeObject(obj);
os.flush();
byte[] sendBuf = byteStream.toByteArray();
os.close();

return sendBuf;
}
}
TAG