간단한 게임을 만들기 위해 다음과 같은 비트 맵으로 캔버스를 그리는 템플릿을 사용했습니다.
private void doDraw(Canvas canvas) {
for (int i=0;i<8;i++)
for (int j=0;j<9;j++)
for (int k=0;k<7;k++) {
canvas.drawBitmap(mBits[allBits[i][j][k]], i*50 -k*7, j*50 -k*7, null); } }
(캔버스는 “run ()”에 정의되어 있으며 SurfaceView는 GameThread에 있습니다.)
첫 번째 질문은 새 레이아웃을 위해 전체 캔버스를 지우거나 다시 그리는 방법입니다 .
둘째, 화면의 일부만 업데이트하려면 어떻게해야합니까?
// This is the routine that calls "doDraw":
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
if (mMode == STATE_RUNNING)
updateGame();
doDraw(c); }
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c); } } } }
답변
새 레이아웃을 위해 전체 캔버스를 지우거나 다시 그리려면 어떻게합니까 (= 게임에서 시도)?
을 호출 Canvas.drawColor(Color.BLACK)
하거나 지우고 싶은 색상을 선택하세요 Canvas
.
그리고 : 화면의 일부만 업데이트하려면 어떻게해야합니까?
Android OS는 화면을 업데이트 할 때 모든 픽셀을 다시 그리기 때문에 “화면의 일부”만 업데이트하는 방법은 없습니다. 그러나에서 이전 그림을 지우지 않을 때 Canvas
이전 그림은 여전히 표면에 남아 있으며 이는 아마도 화면의 “일부만 업데이트”하는 한 가지 방법 일 것입니다.
따라서 “화면의 일부를 업데이트”하려면 Canvas.drawColor()
메서드 호출을 피하십시오 .
답변
PorterDuff 클리어 모드로 투명한 색상을 그립니다.
Canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
답변
Google 그룹에서 이걸 찾았고이게 저에게 효과적이었습니다 ..
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawRect(0, 0, width, height, clearPaint);
설정된 비트 맵을 유지하면서 도면 직사각형 등을 제거합니다.
답변
@mobistry의 답변을 시도했습니다.
canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
그러나 그것은 나를 위해 일하지 않았습니다.
저에게 해결책은 다음과 같습니다.
canvas.drawColor(Color.TRANSPARENT, Mode.MULTIPLY);
아마도 어떤 사람은 같은 문제를 가지고있을 것입니다.
답변
경로 클래스의 재설정 방법 사용
Path.reset();
답변
mBitmap.eraseColor(Color.TRANSPARENT);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
답변
surfaceview 확장 클래스 생성자에 코드 아래에 붙여 넣으십시오 ………….
생성자 코딩
SurfaceHolder holder = getHolder();
holder.addCallback(this);
SurfaceView sur = (SurfaceView)findViewById(R.id.surfaceview);
sur.setZOrderOnTop(true); // necessary
holder = sur.getHolder();
holder.setFormat(PixelFormat.TRANSPARENT);
xml 코딩
<com.welcome.panelview.PanelViewWelcomeScreen
android:id="@+id/one"
android:layout_width="600px"
android:layout_height="312px"
android:layout_gravity="center"
android:layout_marginTop="10px"
android:background="@drawable/welcome" />
위의 코드를 시도하십시오 …