Здравствуй читатель, это начало цикла статей по работе с платформой Android. Я постараюсь излагать интересные вещи, т.к. в рунете не так много информации по работе с платформой. Много букав, давай ближе к делу. Я предполагаю, что у тебя уже стоит Eclipse + ADT , ты более или менее владеешь основами работы платформы (если нет то можешь, отправится на офф сайт, там много полезной инфы гайды, документация, форум, если с английским не очень то поищи книги наших соотечественников, но большинство из них пока оставляет желать лучшего). Первое что мы сейчас сделаем это простой вывод изображения в рабочую область. Сразу хочу предупредить, что это по большей части перевод или рерайт вот этого урока (хотел было присвоить себе лавры, но так и не смог не хорошо это).
package com.droidnova.android.tutorial2d; import android.app.Activity; import android.os.Bundle; public class Tutorial2D extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
Первым делом мы создаем свой класс унаследованный от Activity. В конструкторе указываем, какой layout использовать для вывода. В настройках layout’а укажите свойства wrap_content в layout_width и layout_height, тогда ваш layout растянется по всей поверхности экрана, ниже привожу, как это выглядит у меня в xml. Вам не обязательно ковырять xml в ручную, достаточно воспользоваться визуальным редактором, щелкнув правой клавишей на рабочей области layout’а установив галочку в
Layout Width->Wrap Content
Layout Height ->Wrap Content
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> </LinearLayout></pre>
Следующим делом нам нужно создать класс унаследованный от View и переопределить там метод отрисовки.
class Panel extends View { public Panel(Context context) { super(context); } @Override public void onDraw(Canvas canvas) { Bitmap _scratch = BitmapFactory.decodeResource(getResources(), R.drawable.icon); canvas.drawColor(Color.BLACK); canvas.drawBitmap(_scratch, 10, 10, null); } }
В этом коде мы в конструкторе вызываем базовый конструктор View это обязательно, тут же можно сделать дополнительную инициализацию переменных, но у нас их пока нет. Что же происходит в методе onDraw? Мы загружаем картинку из ресурсов, заполняем фон черным цветом и выводим, загруженное изображение в координатах 10,10. Координатная сетка начинается в левом верхнем углу с координатами (0,0) нижний правый (width-1,heaight-1). Полный листинг
package com.droidnova.android.tutorial2d; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.Window; public class Tutorial2D extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new Panel(this)); } class Panel extends View { public Panel(Context context) { super(context); } @Override public void onDraw(Canvas canvas) { Bitmap _scratch = BitmapFactory.decodeResource(getResources(), R.drawable.icon); canvas.drawColor(Color.BLACK); canvas.drawBitmap(_scratch, 10, 10, null); } } }
Из всего, что здесь приведено не понятным может быть разве что, загрузка изображения, первое, что нужно знать это Android поддерживает следующие форматы графических файлов jpg,png,gif. Изображения хранятся в папке res/drawable, при добавлении изображения класс R автоматически пере компилируется и мы получаем доступ к изображению. Есть некоторые ограничения по именованию, а именно это только строчные буквы, цифры и символ подчеркивания. Для того что бы проект собрался вам нужно положить графический файл в поддерживаемом формате в папку res/drawable.
Здравствуйте!
Как частично очищать область рисования? То есть, как реализовать “ластик”?
Спасибо
canvas.drawARGB(255, 0, 0, 0); или canvas.DrawColor(Color.BLACK) в начале метода onDraw. Данные метод закрашивает нашу канву черным, разумеется можно это делать любым другим цветом или изображением. Если вам нужно перерисовать лишь конкретную область используйте метод invalidate(Rect dirty); Передаем прямоугольник для перерисовки области.