Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to tell if an X and Y coordinate are inside my button?
    text
    copied!<p>I have managed, with great difficulty, to make a bitmap overlay the screen. I can also get touch input, however it gets touch input for EVERYWHERE on the screen.</p> <p>I want to know how I would be able to check if the touch was on my bitmap, which is visible on the screen.</p> <p>The service and view class is below. I have thought and thought, but I couldn't think of a way to do it :(</p> <pre><code>package &lt;package&gt;; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.os.IBinder; import android.support.v4.app.NotificationCompat; import android.view.Gravity; import android.view.MotionEvent; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.Toast; public class MyService extends Service { ButtonView mView; Bitmap bit; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); bit = BitmapFactory.decodeResource(getResources(), R.drawable.button); NotificationCompat.Builder builder = new NotificationCompat.Builder( this); builder.setContentTitle("Ingress Tools Running"); builder.setContentText("Click to stop Ingress Tools"); builder.setSmallIcon(R.drawable.ic_launcher); builder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent( this, StopActivity.class), 0)); NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(1, builder.build()); mView = new ButtonView(this, bit); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); params.gravity = Gravity.RIGHT; params.setTitle("Load Average"); WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.addView(mView, params); } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(getBaseContext(), "onDestroy", Toast.LENGTH_LONG).show(); if (mView != null) { ((WindowManager) getSystemService(WINDOW_SERVICE)) .removeView(mView); mView = null; } } } class ButtonView extends ViewGroup { private Paint mLoadPaint; private Rect r; private Bitmap bit; public ButtonView(Context context, Bitmap bit) { super(context); Toast.makeText(context, "HUDView", Toast.LENGTH_LONG).show(); mLoadPaint = new Paint(); mLoadPaint.setAntiAlias(true); mLoadPaint.setTextSize(10); mLoadPaint.setARGB(255, 255, 0, 0); r = new Rect(); r.set(380, 134, 468, 213); this.bit = bit; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //canvas.drawColor(Color.BLACK); canvas.drawBitmap(bit, 100, 100, null); } @Override protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { } @Override public boolean onTouchEvent(MotionEvent event) { int area = bit.getWidth() * bit.getHeight(); //if (event.getY() &lt;= maxY &amp;&amp; event.getX() &lt;= maxX) { Toast.makeText(getContext(), "Open tools: ", Toast.LENGTH_LONG) .show(); //} return true; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload