довольно новый для Android Dev. и я испытываю затруднения при реализации простого рисования на холст в коде. Ниже я перечисляю все соответствующие коды для приложения. Обратитесь к моему « CharacterSprite Class: » для конкретной проблемы. >>
Это был мой canvas.drawRect не работает ..
- Я не уверен, почему?
- Может быть, мне нужно реализовать другой
отдельный класс для каждой анимации / вызова отрисовки?
- Должен ли я реализовать другой поток для обработки вызова draw.Rect?
И
Первое размещение, так что здесь ничего не выходит, любой совет будет более
Добро пожаловать.
Спасибо за ваше время.
-Адам С.
MainActivity:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new GameView(this));
}
Класс GameView:
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
private CreatedMainThread thread;
private CharacterSprite characterSprite;
public GameView (Context context){
super(context);
getHolder().addCallback(this);
thread = new CreatedMainThread(getHolder(), this);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
characterSprite.update();
}
@Override
public void surfaceCreated(SurfaceHolder holder){
characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(), R.drawable.megumin_hat_icon));
thread.setRunning(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){
boolean retry = true;
while (retry){
try {
thread.setRunning(false);
thread.join();
} catch (InterruptedException e){
e.printStackTrace();
}
retry = false;
}
}
public void update(){
characterSprite.update();
}
@Override
public void draw(Canvas canvas){
super.draw(canvas);
if(canvas!=null) {
// setting background color:
Paint paint = new Paint();
paint.setColor(Color.DKGRAY);
canvas.drawColor(paint.getColor());
// calling the draw method:
characterSprite.draw(canvas);
}
}
}
Класс резьбы:
public class CreatedMainThread extends Thread {
private SurfaceHolder surfaceHolder;
private GameView gameView;
private boolean running;
public static Canvas canvas;
public CreatedMainThread(SurfaceHolder surfaceHolder, GameView gameView){
super();
this.surfaceHolder = surfaceHolder;
this.gameView = gameView;
}
@Override
public void run(){
while (running){
canvas = null;
try
{
canvas = this.surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
this.gameView.update();
this.gameView.draw(canvas);
}
} catch(Exception e)
{
e.printStackTrace();
}
finally
{
if (canvas != null)
{
try
{
surfaceHolder.unlockCanvasAndPost(canvas);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
public void setRunning(boolean isRunning){
running = isRunning;
}
}
Вот мои вопросы:
Метод public void draw (Canvas) , растровое изображение отображается нормально, но draw.rect не отображается.
CharacterSprite Класс:
public class CharacterSprite {
private RectF rectF = new RectF();
private Bitmap sprite;
private int x,y;
private int xVel = 10;
private int yVel = 5;
private int screenW = Resources.getSystem().getDisplayMetrics().widthPixels;
private int screenH = Resources.getSystem().getDisplayMetrics().heightPixels;
public CharacterSprite(Bitmap img){
sprite = img;
x = 50;
y = 50;
//Setting rectangle:
rectF.bottom = 20;
rectF.top = 20;
rectF.left = 20;
rectF.right = 20;
}
public void draw(Canvas canvas){
// Draw Rect:
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setColor(paint.getColor());
canvas.drawRect(rectF, paint); // <<<<<-- Does not display!!!
// Draw Hat
canvas.drawBitmap(sprite,x,y,null);
}
public void update() {
if(x < 0 && y <0) {
x = screenW / 2;
y = screenH / 2;
}else {
x += xVel;
y += yVel;
if((x > screenW - sprite.getWidth()) || (x<0)){
xVel = xVel*-1;
}
if((y > screenH - sprite.getHeight()) || (y<0)){
yVel = yVel*-1;
}
}
}
}