
我很难设法在屏幕上叠加位图.我也可以获得触摸输入,但它可以在屏幕上获得每个地方的触摸输入.
我想知道如何检查触摸是否在我的位图上,这在屏幕上是可见的.
服务和视图类如下.我有想过和想过,但我想不出办法:(
package <package>;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() <= maxY && event.getX() <= maxX) { Toast.makeText(getContext(), "Open tools: ", Toast.LENGTH_LONG) .show(); //} return true; }}解决方法:
考虑直接使用FrameLayout(或VIEwGroup的任何其他子类)而不是VIEwGroup.因为您当前的onLayout方法实现不正确,这将导致您显示子视图的问题.
现在,更接近你的问题.您应该初始化Rect并仅存储位图的左侧,顶部,右侧和底部位置.我可以看到,目前你已经初始化了r变量,但没有在任何地方使用它.
所以,你可以像这样初始化它:
r = new Rect(100, 100, 100 + bit.getWIDth(), 100 + bit.getHeight());现在在ontouchEvent中你可以检查:
r.contains((int) event.getX(), (int) event.getY()); 总结 以上是内存溢出为你收集整理的java – 如何判断X和Y坐标是否在我的按钮内?全部内容,希望文章能够帮你解决java – 如何判断X和Y坐标是否在我的按钮内?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)