Android Canvas不会填充屏幕

时间:2012-08-07 15:47:04

标签: android android-layout surfaceview

我正在尝试使用SurfaceView制作游戏并绘制到Canvas上,但画布并未填满我手机上的整个屏幕!我在我的摩托罗拉Atrix 2上运行应用程序,256 dpi和4.3英寸屏幕。下面我发布了我的main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.figitaki.pong.MainGamePanel
        android:id="@+id/MainGamePanel"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/Welcome"
            android:text="@string/welcome_text"
            android:visibility="visible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center_horizontal"
            android:textColor="#88FFFFFF"
            android:textSize="24dp" />
    </RelativeLayout>

</FrameLayout>

这是MainGamePanel.java类:

package com.figitaki.pong;

import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.util.Log;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;

public class MainGamePanel extends SurfaceView implements SurfaceHolder.Callback {

    private MainThread thread;
    private Ball ball;
    private Bitmap background;

    private static final String TAG = MainGamePanel.class.getSimpleName();

    public MainGamePanel(Context context, AttributeSet attribs) {
        super(context, attribs);

        getHolder().addCallback(this);

        ball = new Ball(BitmapFactory.decodeResource(getResources(), R.drawable.droid_1), 50, 50);
        background = BitmapFactory.decodeResource(getResources(), R.drawable.droid_1);

        thread = new MainThread(getHolder(), this);

        setFocusable(true);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        background = Bitmap.createScaledBitmap(background, width, height, true);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        thread.setRunning(true);
        thread.start();
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        boolean retry = true;
        while(retry) {
            try {
                thread.join();
                retry = false;
            } catch (InterruptedException e) {
            }
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            ball.handleActionDown((int)event.getX(), (int)event.getY());
            if(event.getY() > getHeight() - 50) {
                thread.setRunning(false);
                ((Activity)getContext()).finish();
            } else {
                Log.d(TAG, "Coords: x=" + event.getX() + ",y=" + event.getY());
            }
        }
        if(event.getAction() == MotionEvent.ACTION_MOVE) {
            if(ball.isTouched()) {
                ball.setX((int)event.getX());
                ball.setY((int)event.getY());
            }
        }
        if(event.getAction() == MotionEvent.ACTION_UP) {
            if(ball.isTouched()) 
                ball.setTouched(false);
        }

        return true;
    }

    @Override
    public void onDraw(Canvas canvas) {
        canvas.drawBitmap(background, 0, 0, null);
        ball.draw(canvas);
    }
}

我需要画布或平面视图或者它是什么,以填满整个屏幕。提前谢谢。

1 个答案:

答案 0 :(得分:0)

想出来。我只需要添加:

<uses-sdk android:targetSdkVersion=">=4" />

在我的清单文件中!