diff --git a/app/src/main/java/com/dragosholban/androiddrawing/DrawingView.java b/app/src/main/java/com/dragosholban/androiddrawing/DrawingView.java new file mode 100644 index 0000000..7eb628c --- /dev/null +++ b/app/src/main/java/com/dragosholban/androiddrawing/DrawingView.java @@ -0,0 +1,60 @@ +package com.dragosholban.androiddrawing; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.os.Build; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.util.AttributeSet; +import android.view.View; + +import java.util.ArrayList; + +public class DrawingView extends View { + + private ArrayList paths = new ArrayList<>(); + + public DrawingView(Context context) { + super(context); + } + + public DrawingView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public DrawingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public DrawingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public void addPath(Path path) { + paths.add(path); + } + + public Path getLastPath() { + if (paths.size() > 0) { + return paths.get(paths.size() - 1); + } + + return null; + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + for (Path path : paths) { + Paint paint = new Paint(); + paint.setColor(0X80000000); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(3f); + canvas.drawPath(path, paint); + } + } +} diff --git a/app/src/main/java/com/dragosholban/androiddrawing/MainActivity.java b/app/src/main/java/com/dragosholban/androiddrawing/MainActivity.java index 06650e1..d226e72 100644 --- a/app/src/main/java/com/dragosholban/androiddrawing/MainActivity.java +++ b/app/src/main/java/com/dragosholban/androiddrawing/MainActivity.java @@ -5,9 +5,14 @@ public class MainActivity extends AppCompatActivity { + DrawingView drawingView; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + drawingView = findViewById(R.id.canvas); + drawingView.setOnTouchListener(new TouchListener()); } } diff --git a/app/src/main/java/com/dragosholban/androiddrawing/TouchListener.java b/app/src/main/java/com/dragosholban/androiddrawing/TouchListener.java new file mode 100644 index 0000000..7dda585 --- /dev/null +++ b/app/src/main/java/com/dragosholban/androiddrawing/TouchListener.java @@ -0,0 +1,35 @@ +package com.dragosholban.androiddrawing; + +import android.graphics.Path; +import android.view.MotionEvent; +import android.view.View; + +public class TouchListener implements View.OnTouchListener { + + @Override + public boolean onTouch(View view, MotionEvent event) { + float x = event.getX(); + float y = event.getY(); + DrawingView drawingView = (DrawingView) view; + Path path; + + switch (event.getAction() & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + path = new Path(); + path.moveTo(x, y); + drawingView.addPath(path); + break; + case MotionEvent.ACTION_MOVE: + path = drawingView.getLastPath(); + if (path != null) { + path.lineTo(x, y); + } + break; + } + + drawingView.invalidate(); + + return true; + } +} + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 83da3cc..81047b4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" android:background="#AFAFAF" tools:context=".MainActivity"> -