package com.codigoparallevar.minicards; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; import android.view.MotionEvent; import android.view.View; import com.codigoparallevar.minicards.parts.Part; import com.codigoparallevar.minicards.parts.Placeholder; import com.codigoparallevar.minicards.parts.buttons.RoundButton; import java.util.ArrayList; class DrawView extends View { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); ArrayList parts = new ArrayList<>(); public DrawView(Context context) { super(context); paint.setColor(Color.RED); parts.add(new RoundButton(500, 1200, 80, 100)); } @Override public void onDraw(Canvas canvas){ long time = System.currentTimeMillis(); for (Part part : parts){ part.draw(canvas); } Log.d("Render time", System.currentTimeMillis() - time + "ms"); } @Override public boolean onTouchEvent(MotionEvent event){ int x = (int) event.getX() - this.getLeft(); int y = (int) event.getY() - this.getTop(); Part touchedPart = getPartOn(x, y); if (touchedPart == null){ Log.d("Touched part", "not found"); return false; } Log.d("Touched part", "Part: " + touchedPart); invalidate(); return true; } private Part getPartOn(int x, int y) { // Look in the list, in reverse so top-most elements are checked before for (int i = parts.size() - 1; i >= 0; i--){ Part part = parts.get(i); if ((x >= part.getLeft()) && (part.getRight() >= x) && (y >= part.getTop()) && (part.getBottom() >= y)){ return part; } } return null; } }