SurfaceView클래스
public class SurView extends SurfaceView implements SurfaceHolder.Callback{
// cache bitmap
Context mContext;
SurfaceHolder mHolder;
GameThread mThread;
//-------------------------------------
// 생성자
//-------------------------------------
public SurView(Context context, AttributeSet attrs) {
super(context, attrs);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
mHolder = holder; // 생성한 holder를 전역변수에 저장
mContext = context; // 인수로 넘어 온 context를 전역변수에 저장
mThread = new GameThread(); // GameThread 생성
}
//-------------------------------------
// SurfaceView가 만들어질 때 호출됨
//-------------------------------------
public void surfaceCreated(SurfaceHolder holder) {
mThread.start(); // Thread 시작
}
//-------------------------------------
// SurfaceView의 크기가 바뀔 때 호출됨
//-------------------------------------
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
//-------------------------------------
// SurfaceView가 종료될 때 호출됨
//-------------------------------------
public void surfaceDestroyed(SurfaceHolder holder) {
}
//-------------------- 여기서 부터는 스레드 영역 ----------------------------
class GameThread extends Thread {
Bitmap imgBack=null;
//-------------------------------------
// Thread Constructor
//-------------------------------------
public GameThread() {
Display display = ((WindowManager) mContext.getSystemService(mContext.WINDOW_SERVICE))
.getDefaultDisplay();
int width = display.getWidth(); // 화면의 폭
int height = display.getHeight(); // 화면의 높이
URL imUrl;
try {
imUrl = new URL("http://img.gnj.kr/newsen/news_photo/2012/08/22/201208221328552210_1.jpg);
HttpURLConnection conn = (HttpURLConnection) imUrl.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
imgBack = BitmapFactory.decodeStream(bis);
imgBack = Bitmap.createScaledBitmap(imgBack, 100, 100, true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// imgBack = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher);
// imgBack = Bitmap.createScaledBitmap(imgBack, 100, 100, true);
// 이미지 확대
}
//-------------------------------------
// Thread run
//-------------------------------------
public void run() {
Canvas mCanvas = null; // canvas를 만든다
while (true) {
mCanvas = mHolder.lockCanvas(); // canvas를 잠그고 버퍼 할당
/* try {
synchronized (mHolder) { // 동기화 유지
mCanvas.drawBitmap(imgBack, 0, 0, null); // 버퍼에 그리기
}
} finally {
mHolder.unlockCanvasAndPost(canvas); */
if(imgBack !=null && mCanvas!=null){// canvas의 내용을 View에 전송
mCanvas.drawBitmap(imgBack, 0, 0,null);
// mHolder.unlockCanvasAndPost(mCanvas);
}
mHolder.unlockCanvasAndPost(mCanvas);
} // while
} // run
} // End of Thread
}
메인 클래스
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
메인xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.example.sad.SurView
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</FrameLayout>
오류 없음
안되는이유를 정말 모르겠네요.
화면은 뜨는데.. 이미지가 안떠요...
어디가 잘못됬는지 알려주세요...