1. Нарисовать картинки по вкусу и положить в дирректорию картинок проекта - <...>/projects/HelloAndroid/res/drawable
например - <...>/projects/HelloAndroid/res/drawable/aaa.gif
2. В программе загружать картинку следующим образом -
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aaa);3. Для рисования картинки надо отнаследовать класс View переопределить у него одну функцию - onDraw, которая и будет
рисовать на экран когда андроид ее вызовет. Проще всего сделать внутренний класс - от него нужна только одна функция
и желателен доступ ко всем переменным.
public class HelloAndroid extends Activity {4. Далее в основном классе надо этот новый View определить как основной экран в инициализирующей функции onCreate
...
class TestView extends View {
Paint paint = new Paint();
@Override protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bitmap, x, x, paint);
}
}
...
...5. Для обрабатывания прикосновений есть функция onTouchEvent()
TestView tv;
Bitmap bitmap; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aaa);
tv = new TestView();
setContentView(tv);
}
...
event.getX() и event.getY возвращают координаты пальца на экране
и по этим координатам я рисую картинку - задаю ее новые координаты
и говорю tv (TestView) перерисоваться - tv.invalidate(). Далее Android вы-
зовет onDraw() и картинка перересуется.
...перерисовывание происходит только когда палец дотронулся до экрана (ACTION_DOWN)
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
x = event.getX();
y = event.getY();
tv.invalidate();
return true;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
x = event.getX();
y = event.getY();
tv.invalidate();
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
new Thread(new GoBack()).start();
return true;
}
return super.onTouchEvent(event);
}
...
и пока палец двигается по экрану (ACTION_MOVE), а когда палец отняли от экрана (ACTION_UP)
запускается параллельно нитка которая возвращает картинку на место. 6. Для параллельной нитки исполнения определяем еще один встроенный клас для этой нитки:
class GoBack implements Runnable {В данном случае нитка в два шага вернет координаты в нуль с задержкой в 0.1 секунды.
public void run() {
try {
Thread.sleep( 100 );
x = x/2;
y = y/2;
tv.postInvalidate();
Thread.sleep( 100 );
x = 0;
y = 0;
tv.postInvalidate();
} catch (Exception e) {
}
}
}
Для перерисовывания View тут надо вызывать postInvallidate(), когда это вне цикла обработки
событий андроида, почему то нужно вызывать именно эту функцию а не invalidate().
Добро пожаловать в мой блог. Мой старый сайт на "песочнице"
лежит и когда подниметься не понятно, если вообще подниметься...
Так что я перешел сюда и продолжаю свой дневник теперь здесь.
Буду вести его одновременно на русском и английском.
Василий
Welcome to my blog! My old site down for good and I do not know when
it will be up again if ever... So I am here now doing my blogging and
now I decide to do it both in Russian and English.
Vassili.
Sunday, January 15, 2012
Программирование элементов игр на Android (рисование картинок, ввод прикосновений и параллельное программирование):
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment