В новинку для Android - Рисование представления во времени выполнения

ПРИВЕТ все,

Я просто начинаю с разработкой для Android. Я надеюсь портировать одно из своих приложений для iPhone, но я отчасти в недоумении для того, как привлечь представление во времени выполнения (представление, не объявленное в XML). В основном я хочу потянуть простой прямоугольник, но затем смочь управлять его кадром, будучи привлеченным.

Извините, если это действительно, действительно простой вопрос, но я, может казаться, не нахожу некоторый эквивалент iPhone SDK здесь.

Заранее спасибо!

6
задан strange quark 29 March 2010 в 16:01
поделиться

1 ответ

Похоже, вы хотите поэкспериментировать с 2D-графикой - для этого , вам следует использовать Canvas . Вы можете управлять рисованием Canvas с помощью метода invalidate () , который сообщает Android, что нужно перерисовать все, запуская ваш настроенный onDraw ( ) . Вы упомянули, что не хотите использовать XML-файл, но это самый простой способ разместить Canvas - вам не нужно определять его содержимое в XML-файле, а просто сообщить файлу макета, что он там . Мощный, но простой способ добавить Canvas в ваше приложение - это настроить View. Например, включите в свой XML-файл элемент . Затем декларировать являются CustomView расширяет класс View . Любой рисунок, который вы хотите сделать, используйте метод onDraw ().

Например, чтобы нарисовать прямоугольник, сделайте что-нибудь вроде этого.

//First you define a colour for the outline of your rectangle
rectanglePaint = new Paint();
rectanglePaint.setARGB(255, 255, 0, 0);
rectanglePaint.setStrokeWidth(2);
rectanglePaint.setStyle(Style.STROKE);

//Then create yourself a Rectangle
Rect rectangle = new Rect(left, top, right, bottom) //in pixels

//And here's a sample onDraw()
@Override
public void onDraw(Canvas canvas){
    rectangle.offset(2, 2);
    canvas.drawRect(rectangle, rectanglePaint);
}

Каждый раз, когда из вашей программы вызывается invalidate (), представление перерисовывается, и прямоугольник перемещается на 2 пикселя вниз и вправо. Примечание: перерисовка происходит только в том случае, если основной поток «ожидает». Другими словами, если у вас есть цикл, вызывающий недействительность несколько раз, представление фактически не будет отрисовано, пока цикл не завершится. Вы можете обойти это, но это добавляет больше сложности. В качестве примера того, как это делается, посмотрите пример игры LunarLander от Google - это простая игра, демонстрирующая настраиваемый вид, 2 потока и то, как реализовать непрерывную анимацию.

7
ответ дан 17 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: