Java Android和canvas绘制-灰色和错误大小的图像
我试着用canvas.draw在Android Studio上画图,经过几天的努力,我终于画出了一幅图,但是 我的图像有一种奇怪的颜色,而且非常小 我的精灵类现在我不做任何动画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
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;它什么也没做,只是展示了图像。因此,您可以在布局文件中使用它,以供以后使用。我不想改变我的实际代码^^