티스토리 뷰



이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft )
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501
* 이 예제는 안드로이드 팜으로 만들어졌습니다.

이 예제는 뷰에 비트맵 이미지를 출력하고, 이미지에서 알고싶은 부분을 선택하면 해당 위치의 색상을
알려주는 Color Picker 기능을 합니다. 색상을 추출하는 부분을 중점으로 설명하기 위해서 하나의
PNG 파일을 리소스에 포함시켜서 사용하였습니다.
사진을 터치하면 속이 비어있는 원이 터치한 위치에 그려지며 해당 원 내부의 색상이 어떤 색인지 알려
줍니다.
1. 실행 화면
2. 주요 소스 코드
PickOutColorActivity.java 부분...
// PictureView 에서 터치했을 때 해당 좌표의 색상을 받는 메소드
public void setColor(int parm_color)
{
String str;
// 색상을 Red, Green, Blue 로 나누어서 출력한다.
str = "R : " + ((parm_color >> 16)&0xFF) + ", G : " + ((parm_color >> 8)&0xFF) +
", B : " + (parm_color&0xFF);
// TextView 에 출력한다.
m_display_view.setText(str);
}
PictureView.java 부분...
// 사용자정의 뷰의 출력 형식을 정의하는 오버라이딩된 메소드
protected void onDraw(Canvas canvas)
{
// 비트맵이 정상적으로 생성된 경우
if(m_bitmap != null) {
// 비트맵을 그린다. 이때 비트맵의 크기를 축소하거나 확대하여 그리면,
// 좌표 정보를 이용한 비트맵의 색상정보를 얻을 수 없으므로 원래 크기로 그린다.
canvas.drawBitmap(m_bitmap, 0, 0, m_paint);

// 터치한 위치가 있는 경우
if(m_click_x > 0 && m_click_y > 0) {
// 원을 그린다.
canvas.drawCircle(m_click_x, m_click_y, CIRCLE_RADIUS, m_paint);
}
}
}

// 뷰에 터치한 경우 호출되는 콜백 핸들러
public boolean onTouchEvent(MotionEvent event)
{
super.onTouchEvent(event);

// 터치이벤트 중에서 화면을 누르고, 움직이고, 떼는 모든 상황에서 동일한 처리를 한다.
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN :
case MotionEvent.ACTION_MOVE :
case MotionEvent.ACTION_UP :

// 터치된 좌표를 얻는다.
float x = event.getX();
float y = event.getY();

// 뷰 영역에서 반지름크기 이내 영역이 터치된 경우
if(CIRCLE_RADIUS < x && m_dest_rect.right - CIRCLE_RADIUS > x) {
if(CIRCLE_RADIUS < y && m_dest_rect.bottom - CIRCLE_RADIUS > y) {
// 좌표를 멤버변수에 저장한다.
m_click_x = x;
m_click_y = y;
// 액티비티에 터치된 좌표의 색상정보를 전달한다.
m_parent.setColor(m_bitmap.getPixel((int)m_click_x, (int)m_click_y));

// 뷰를 다시 그린다.
invalidate();
} else m_click_x = m_click_y = -1;
} else m_click_x = m_click_y = -1;
// 이벤트를 성공적으로 처리했다는 것을 알린다.
return true;
}
// 누르고, 움직이고, 떼는 행위 외의 이벤트는 이 핸들러에서 처리하지 않았음을 알린다.
return false;
}

 

댓글