Построение первых приложений для устройств на базе Android |
Рисование пальцем на canvas |
В этом приложении для рисования пальцем задействованы два события. Первое - палец на экране используется для определения координат прикосновения. Второе - палец движется по экрану для рисования линии за меняющимися координатами. Когда приложение запустите экран будет черным, коснитесь его и фон рисования станет белым. В программе можете изменить цвет фона. Второй вариант приложения немного усложнен. В верхней половине экрана цвет рисования фиолетовый. При переходе в нижнюю половину цвет всего рисунка изменяется на малиновый. Программно можете установить свои цвета. Попробуйте самостоятельно изменить код так, что бы цвет изменялся при переходе с левой половины экрана в правую и наоборот. |
_______________MainActivity.java_______________ 1 вариант
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(new MySurfaceView(this));
// скрыть панель уведомлений
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
class MySurfaceView extends SurfaceView {
SurfaceHolder surfaceHolder;
private Paint paint = new Paint();
private Path path = new Path();
public MySurfaceView(Context context) {
super(context);
surfaceHolder = getHolder();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(10);
paint.setAntiAlias(true); // режим сглаживания
paint.setColor(Color.rgb(150,20,250));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.drawPath(path, paint);
surfaceHolder.unlockCanvasAndPost(canvas);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
path.moveTo(event.getX(), event.getY());
}
else if (event.getAction() == MotionEvent.ACTION_MOVE) {
path.lineTo(event.getX(), event.getY());
}
return true;
}
}
}
_______________MainActivity.java_______________ 2 вариант
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(new MySurfaceView(this));
// скрыть панель уведомлений
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
// класс SurfaceView предоставляет отдельную область для рисования
// действия в которой вынесены в отдельный поток приложения
class MySurfaceView extends SurfaceView {
SurfaceHolder surfaceHolder; // объект surfaceHolder дает canvas для отрисовки
private Paint paint = new Paint(); // создание экземпляра класса Paint
private Path path = new Path();
public MySurfaceView(Context context) {
super(context);
surfaceHolder = getHolder(); // метод getHolder()
paint.setStyle(Paint.Style.STROKE); // стиль рисования
paint.setStrokeWidth(20); // ширина кисти
paint.setAntiAlias(true); // режим сглаживания включен
}
@Override
public boolean onTouchEvent (MotionEvent event) {
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.WHITE); // закрашивание холста белым цветом
canvas.drawPath(path, paint); // кисть рисует на холсте
surfaceHolder.unlockCanvasAndPost(canvas); // вывод на холст результата отрисовки
if (event.getY() > 1000) // условие смены цвета
paint.setColor(Color.rgb(255,0,100));
else paint.setColor(Color.rgb(150,0,250));
// если палец на экране
if (event.getAction() == MotionEvent.ACTION_DOWN) {
path.moveTo(event.getX(), event.getY()); // определение координат пальца
}
// если палец движется по экрану
else if (event.getAction() == MotionEvent.ACTION_MOVE) {
path.lineTo(event.getX(), event.getY()); // рисование линии по координатам
}
return true;
}
}
}
Выбери лучшее! allbest |