티스토리 뷰
//SurfaceHolder와 SurfaceHolder.Callback 적용...이것들이 어디에 쓰이는지 모른다
//아무래도 FrameLayout일때 쓰이는것 같은데 사용법은 잘 모름..
//SurfaceHolder는 직접 접근할수가 없다고 한다
//그래서 SurfaceHolder.Callback을 이용해서 접근한다고 한다.
//그래서 여기서 클래스 안에 클래스를 하나 더 적용해서 (쓰래드 상속 받은 클래스)
//그 클래스에서 그리기, 키입력을 받아 쓴다.
//layout 에서 <ImageView> 으로 이미지를 그리고 배치할수 있으나
//FrameLayout 이 아무래도 전체 그리기로는 알맞는것 같다.
//비트맵,png 이미지 하나 그리는데 소스가 너무 많다.. 헷깔린다.
package com.chiree.myimageview;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
// 클래스 생성시
//superClass를 android.view.SurfaceHoloder 로 지정
//interface를 surfaceholder.Callback으로 지정
public class ImageView extends SurfaceView implements SurfaceHolder.Callback {
private img mimg;
public ImageView(Context context, AttributeSet attrs) {
super(context, attrs);
//surfaceholder callback설정
SurfaceHolder holder = getHolder();
holder.addCallback(this);
//thread 클래스 생성
mimg = new img(holder,context,new Handler());
// TODO Auto-generated constructor stub
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
//thread 클래스 시작하기.
mimg.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
}
//내부 클래스 Thread 상속 받아 생성
class img extends Thread{
private Bitmap mbitmap;
private Drawable mpng ;
private int mpngWidth;
private int mpngHeight;
Canvas canvas;
private SurfaceHolder mSurfaceHolder;
public img(SurfaceHolder surfaceHolder,Context context, Handler handler) {
mSurfaceHolder = surfaceHolder;
//이미지 로드
Resources res = context.getResources();
mbitmap = BitmapFactory.decodeResource(res, R.drawable.mimgback1);
mpng = context.getResources().getDrawable(R.drawable.mfrontimage1);
mpngWidth = mpng.getIntrinsicWidth();
mpngHeight = mpng.getIntrinsicHeight();
// TODO Auto-generated constructor stub
}
//쓰래드는 run() 함수를 호출한다.
//while 문으로 계속 그리는데 예외처리는 잘 모르는 부분이다.
public void run(){
while(true){
Canvas c = null;
try{
c = mSurfaceHolder.lockCanvas(null);
synchronized(mSurfaceHolder){
startDraw(c);
sleep(100);
}
}catch(InterruptedException e){
e.printStackTrace();
}finally{
if(c != null)
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
//run함수에서 그리기함수를 호출한다.
public void startDraw(Canvas canvas) {
// TODO Auto-generated method stub
//비트맵 그리는 함수
canvas.drawBitmap(mbitmap,0,0,null);
//png 그리는 함수 방법
mpng.setBounds(10,10,10+mpngWidth,10+mpngHeight);
mpng.draw(canvas);
}
}
}
- Total
- Today
- Yesterday
- 태풍발생
- 고양이 깜놀
- 서울특별시
- 혁오
- 신청
- 공모전
- 청년
- 청년몽땅정보통
- android
- 지원
- 민경훈
- 안드로이드
- 축제
- 임창정
- 김광석 기타 코드
- 청년정책
- 문화
- 유니티
- 지원금
- Linked List
- 버즈
- 아이유
- 김광석
- 김광석 코드
- 발생후
- 서울시
- 뜻밖의 샤워
- 연결 리스트
- 유머
- 공연
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |