2017-08-01 69 views
0

我嘗試在Android工作室canvas.draw和掙扎後的幾天裏繪製圖像,我finnaly繪製圖像,但...Android和帆布畫 - 格雷和錯誤大小的圖像

我的圖像具有奇怪的顏色,它非常非常小。

我的Sprite類(現在我沒有做任何動畫)

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從我的圖像中創建的一些圖像已損壞。**

顏色問題已解決,但尺寸仍在發生變化。

+0

我試圖把200,200.它只是將其移動到200,200。該功能是好的。 –

回答

0

問題來自我的資產,這是不正確導入所有dpi的變化。 Android Studio從我的圖像創建的一些圖像已損壞。 我不得不將圖像放在可繪製的文件夾中,以防止android根據設備的dpi來縮放圖像。

1
paint.setColor(Color.BLACK) 
canvas.drawBitmap(test.getImage(), test.getX(), test.getY(), paint); 

此畫圖用於繪製您的位圖。

canvas.drawBitmap(bitmap, x, y, paint); 

X:位圖的左側的位置被抽

Y:位圖的頂側的位置被抽

所以你實際上把你的位圖中的位置(100,100)。 它不決定你的位圖的大小。

看看官方Document這裏。

+0

顯示圖像的大小不是其原始大小。什麼是調整大小?我不想調整它的大小,而是將它顯示爲原始大小。我想我不需要編碼。也許我在這裏錯過了一些東西。但它並不能解釋奇怪的顏色。 –

+0

如果你想在你的活動中顯示你的圖像,只需使用imageView。我看到你的代碼setContentView(gameView);它什麼都沒做,只是顯示圖像。所以你可以在你的佈局文件中使用

+0

這是爲了以後的目的。我想不改變我的實際代碼^^ –