В связи с небольшими косяками у Андройд студии пост задержался, поэтому сегодня будет по-максимуму кода. Продолжаем начатое
Создадим класс Hero для определения полей хранения координат. Все крайне просто:
public class Hero { private Bitmap bitmap; private int x; private int y; public Hero(Bitmap bitmap, int x, int y) { this.bitmap= bitmap; this.x= x; this.y= y; } public Bitmap getBitmap(){ return bitmap; } public void setBitmap(Bitmap bitmap) { this.bitmap= bitmap; } public int getX(){ return x; } public void setX(int x){ this.x= x; } public int getY(){ return y; } public void setY(int y){ this.y= y; }
Добавим рисование и метод обработки касания:
public boolean isTouched(){ return touched; } public void setTouched(boolean touched){ this.touched= touched; } public void draw(Canvas canvas){ canvas.drawBitmap(bitmap, x-(bitmap.getWidth()/2), y-(bitmap.getHeight()/2),null); } public void handleActionDown(int eventX, int eventY){ if(eventX>=(x- bitmap.getWidth()/2)&&(eventX<=(x+ bitmap.getWidth()/2))){ if(eventY>=(y- bitmap.getHeight()/2)&&(y<=(y+ bitmap.getHeight()/2))){ setTouched(true); }else{ setTouched(false); } }else{ setTouched(false); } }
Доработаем онТачЭвент и онДроу:
@Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction()== MotionEvent.ACTION_DOWN) { hero.handleActionDown((int) event.getX(), (int) event.getY()); if (event.getY() > getHeight() - 50) { thread.setRunning(false); ((Activity) getContext()).finish(); } else { Log.d(TAG, "Coords: x=" + event.getX() + ",y=" + event.getY()); } }if(event.getAction()== MotionEvent.ACTION_MOVE){ if(hero.isTouched()){ hero.setX((int)event.getX()); hero.setY((int)event.getY()); } }if(event.getAction()== MotionEvent.ACTION_UP){ if(hero.isTouched()){ hero.setTouched(false); } } return true; } @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.BLACK); hero.draw(canvas); }
Запускаем, проверяем — все работает.
К слову — немного поменял пикчу героя;)
До новых встреч)