Основы работы с графикой Android (часть 1)

Сентябрь 26th, 2011 § 2 comments

Здравствуй читатель, это начало цикла статей по работе с платформой 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.

§ 2 Responses to Основы работы с графикой Android (часть 1)"

  • Valentin пишет:

    Здравствуйте!
    Как частично очищать область рисования? То есть, как реализовать “ластик”?

    Спасибо

    • admin пишет:

      canvas.drawARGB(255, 0, 0, 0); или canvas.DrawColor(Color.BLACK) в начале метода onDraw. Данные метод закрашивает нашу канву черным, разумеется можно это делать любым другим цветом или изображением. Если вам нужно перерисовать лишь конкретную область используйте метод invalidate(Rect dirty); Передаем прямоугольник для перерисовки области.

Ответить на Valentin Отмена ответа

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Смотреть фильмы онлайн