java– 如何判断X和Y坐标是否在我的按钮内?

java– 如何判断X和Y坐标是否在我的按钮内?,第1张

概述我很难设法在屏幕上叠加位图.我也可以获得触摸输入,但它可以在屏幕上获得每个地方的触摸输入.我想知道如何检查触摸是否在我的位图上,这在屏幕上是可见的.服务和视图类如下.我有想过和想过,但我想不出办法:(package<package>;importandroid.app.NotificationManager;impor

我很难设法在屏幕上叠加位图.我也可以获得触摸输入,但它可以在屏幕上获得每个地方的触摸输入.

我想知道如何检查触摸是否在我的位图上,这在屏幕上是可见的.

服务和视图类如下.我有想过和想过,但我想不出办法:(

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坐标是否在我的按钮内?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1097948.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存