반응형
비트맵 객체는 메모리에 만들어지는 이미지라고 할 수 있다
사진을 찍었을 때 만들어지는 이미지 파일을 읽어 들이면 메모리에 비트맵 객체로 만들 수 있다
그리고 비트맵 객체를 이용하면 화면에 이미지를 그릴 수 있다
비트맵 객체를 만들면 이를 이용해 다양한 조작을 할 수 있고, 특히 그래픽을 그릴 수 있는 메모리 공간을 제공한다
더블 버퍼링이라 불리는 방법은, 별도의 메모리 공간에 미리 그래픽을 그린 후, 뷰가 다시 그려져야할 필요가 있을 때 미리 그려놓은 비트맵을 화면에 표시하는 방법이다
CustomViewImage.java
package com.example.a68_sample_customviewimage;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class CustomViewImage extends View {
private Bitmap cacheBitmap;
private Canvas cacheCanvas;
private Paint mPaint;
public CustomViewImage(Context context) {
super(context);
init(context);
}
public CustomViewImage(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
mPaint = new Paint();
}
// 뷰가 화면에 보이기 전에 Bitmap 객체 만들고 그 위에 그리기
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
createCacheBitmap(w, h);
testDrawing();
}
// 메모리에 Bitmap 객체를 만들고 Canvas 객체 설정
private void createCacheBitmap(int w, int h) {
cacheBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas();
cacheCanvas.setBitmap(cacheBitmap);
}
// 빨간 사각형 그리기
private void testDrawing() {
cacheCanvas.drawColor(Color.WHITE);
mPaint.setColor(Color.RED);
cacheCanvas.drawRect(100, 100, 200, 200, mPaint);
}
// 메모리의 Bitmap을 이용해 화면에 그리기
@Override
protected void onDraw(Canvas canvas) {
if (cacheBitmap != null) {
canvas.drawBitmap(cacheBitmap, 0, 0, null);
}
}
}
앱을 실행하여 뷰가 새로 그려질때 호출되는 onDraw 메소드에는 단순히 메모리에 만들어 두었던 cacheBitmap을 그리는 코드만 들어있다
실제 그래픽이 그려지는 시점은 testDrawing 메소드가 호출되었을 때 이다
createBitmap 메소드를 이용해 만들어지는 비트맵 객체는 뷰의 onSizeChanged 메소드가 호출되었을 때 초기화된 후, testDrawing 메소드에 의해 그려진다
MainActivity.java
package com.example.a68_sample_customviewimage;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
CustomViewImage customViewImage = new CustomViewImage(this);
setContentView(customViewImage);
}
}
반응형
'안드로이드' 카테고리의 다른 글
페인트보드(그림판) 만들기 (0) | 2021.11.02 |
---|---|
BtimapFactory 클래스 (0) | 2021.11.02 |
드로어블 객체로 만들어 그리기 (0) | 2021.11.02 |
뷰에 그래픽 그리기 (0) | 2021.11.01 |
내용 제공자 사용하기, 연락처 조회 (0) | 2021.11.01 |