新建application:
Target SDK: API17:Adndroid4.2
Compile With:API18:Android4.3
Theme:Holo Light with Dark Actior Bar在代码中设置了一张320*480的图作背景,放在drawable-mdpi目录。
同样的代码跟图片,在书附带代码的工程里运行后全屏正常显示。
我自己建的项目工程里就不是全屏的,右边很下面有黑边,不是全屏显示。
个人感觉是跟SDK版本有关系。我的adt 是20130729版本的。从官网下载的:
adt-bundle-windows-x86-20130729。弄了好久了,一直找不到原因。
首先可以肯定不是代码的事情。

解决方案 »

  1.   

    package com.example.zbgtest;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.SurfaceHolder;
    import android.view.SurfaceHolder.Callback;
    import android.view.SurfaceView;public class mySur extends SurfaceView implements Callback{
    private Canvas canvas;
    private Paint paint;
    private SurfaceHolder holder;
    private boolean flag;
    private Bitmap bmpBg;
    private MyThread th_draw;

    public mySur(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    flag = true;
    holder = getHolder();
    holder.addCallback(this);
    paint = new Paint();
    paint.setColor(Color.WHITE);
    bmpBg = BitmapFactory.decodeResource(this.getResources(), R.drawable.menu);
    } public void logic(){

    }
    public void reallyDraw(){
    canvas.drawBitmap(bmpBg, 0, 0, paint);
    }

    public void draw(){
    try{
    canvas = holder.lockCanvas();
    if(canvas != null){
    reallyDraw();
    }
    }catch(Exception e){

    }finally{
    if(canvas != null){
    holder.unlockCanvasAndPost(canvas);
    }
    }
    }

    class MyThread extends Thread{
    private int time;

    public MyThread(int time){
    this.time = time;
    }

    @Override
    public void run(){
    while(flag){
    try {
    draw();
    logic();

    Thread.sleep(time);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }



    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    th_draw = new MyThread(50);
    th_draw.start();
    }
    @Override
    public void surfaceCreated(SurfaceHolder arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
    // TODO Auto-generated method stub
    flag = false;
    }
        
    }package com.example.zbgtest;import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;public class MainActivity extends Activity {    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(new mySur(this));
        }    
    }<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.zbgtest"
        android:versionCode="1"
        android:versionName="1.0" >    <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
            >
            <activity
                android:name="com.example.zbgtest.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application></manifest>
      

  2.   

    我也在自己的android手机上试过了,用我自己的代码就会有黑边,换成书自带的代码就是全屏的,
    图片是同一个的呀~
    同样我把上面的代码粘贴到书中代码的工程里,也是全屏的。
    可以运行我自己的工程就是有黑边...
      

  3.   

    我的eclipse,ADT新建项目的步骤截图:帮忙看看。
      

  4.   

    哦,dpi的问题。一张图片在同样分辨率不同dpi的手机上显示效果是不一样的。你把图片放到hdpi目录下试试。
      

  5.   

    drawable-ldpi、mdpi、hdpi都试过了,
    放在ldpi下面,显示效果会超出屏幕。
    放在hdpi下面,显示的跟上面比显示的更小。
    放在mdpi下面,就是上面的效果。
      

  6.   

    canvas.drawBitmap(bmpBg, 0, 0, paint);
    ==>
    canvas.drawBitmap(bmpBg, null, new RectF(0, 0, w, h), paint);