Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android和canvas绘制-灰色和错误大小的图像_Java_Android - Fatal编程技术网

Java Android和canvas绘制-灰色和错误大小的图像

Java Android和canvas绘制-灰色和错误大小的图像,java,android,Java,Android,我试着用canvas.draw在Android Studio上画图,经过几天的努力,我终于画出了一幅图,但是 我的图像有一种奇怪的颜色,而且非常小 我的精灵类现在我不做任何动画 package com.framework.game; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.util.Map; import java.util.HashMap; import andr

我试着用canvas.draw在Android Studio上画图,经过几天的努力,我终于画出了一幅图,但是

我的图像有一种奇怪的颜色,而且非常小

我的精灵类现在我不做任何动画

package com.framework.game;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import java.util.Map;
import java.util.HashMap;

import android.R;
import android.content.Context;

/**
 * Created by Tong3 on 01/08/2017.
 */

public class Sprite {
    private Bitmap image;

    private int x, y;

    boolean valid;

    Sprite(Context context, int R, int X, int Y){
        x = X;
        y = Y;

        image = BitmapFactory.decodeResource(context.getResources(), R);

        if(image != null)
            valid = true;
        else
            valid = false;
     }



    public Bitmap getImage(){ return image; }

    public int getX(){ return x; }
    public int getY(){ return y; }

    public int getWidth(){ return getImage().getWidth(); }
    public int getHeight(){ return getImage().getHeight(); }

    public boolean isValid(){ return valid; }
}
我的看法是:

package com.framework.game;

import android.graphics.Matrix;
import android.view.SurfaceView;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.content.Context;

import com.example.tong3.tdp.R;

import java.lang.Runnable;

import static com.example.tong3.tdp.R.drawable.testplayer;

/**
 * Created by Tong3 on 01/08/2017.
 */

public class GameView extends SurfaceView implements Runnable {
    volatile boolean running;

    private Thread mainThread = null;

    private int FRAME_RATE = 17;

    private Canvas canvas;
    private Paint paint;
    private SurfaceHolder holder;

    private Sprite test;

    public GameView(Context context){
        super(context);

        holder = this.getHolder();

        test = new Sprite(context, R.drawable.testplayer, 100, 100);
    }

    @Override
    public void run(){
        while(running){
            update();

            draw();

            control();
        }
    }

    private void update(){

    }

    private void draw(){
        if(holder.getSurface().isValid() && test.isValid()) {
            canvas = holder.lockCanvas();

            canvas.drawColor(Color.BLACK);

            //TEST
            canvas.drawBitmap(test.getImage(), test.getX(), test.getY(), paint);

            holder.unlockCanvasAndPost(canvas);
        }
    }

    private void control(){//FPS CONTROL ~60
        try {
            mainThread.sleep(FRAME_RATE);
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }

    public void pause(){
        running = false;
        try {
            mainThread.join();
        }catch(InterruptedException e){
        }
    }

    public void resume(){
        running = true;
        mainThread = new Thread(this);
        mainThread.start();
    }
}
我的主要活动:

   package com.framework.game;

import android.app.Activity;
import android.os.Bundle;

import com.example.tong3.tdp.R;

public class MainActivity extends Activity{
    private GameView gameView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        gameView = new GameView(this);

        setContentView(gameView);
    }

    @Override
    protected void onPause(){
        super.onPause();
        gameView.pause();
    }

    @Override
    protected void onResume(){
        super.onResume();
        gameView.resume();
    }
}
我不能放任何截图,我在我的设备上测试,因为我的计算机不支持它所说的东西

编辑:颜色问题来自我的资产,没有正确导入所有dpi变体。Android Studio根据我的图像创建的一些图像已损坏**

颜色问题已经解决,但尺寸问题仍在发生

这幅画是用来画位图的

canvas.drawBitmap(bitmap, x, y, paint);
x:正在绘制的位图左侧的位置

y:正在绘制的位图顶部的位置

因此,您实际上在位置100100绘制位图。 它不会决定位图的大小

canvas.drawBitmap(bitmap, x, y, paint);
看看这里的官员。

问题是我的资产没有正确导入所有dpi变体。Android Studio根据我的图像创建的一些图像已损坏。
我不得不将图像放在drawable文件夹中,以防止android根据设备的dpi缩放我的图像。

我尝试放置200200。它只是移动到200,200。该功能很好。显示图像的大小不是其原始大小。什么是调整它的大小?我不想调整它的大小,但显示在他的原始大小。我认为我不需要编写代码。也许我错过了什么。但这并不能解释这种奇怪的颜色。如果你想在活动中显示你的图像,只需使用imageView。我看到了你的代码setContentViewgameView;它什么也没做,只是展示了图像。因此,您可以在布局文件中使用它,以供以后使用。我不想改变我的实际代码^^