gpt4 book ai didi

java - 获取触摸输入的 x 和 y 坐标(Android studio,Java)

转载 作者:搜寻专家 更新时间:2023-11-01 09:50:08 24 4
gpt4 key购买 nike

我想获取触摸输入的 x 和 y 坐标。我正在尝试使用:

package com.example.benjamin.labb3;

import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;

import android.view.View.OnTouchListener;

public class Main extends Activity implements OnTouchListener {

DrawView drawView;
String inputAction = "";
Point touch;

@Override public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

drawView = new DrawView(this);
setContentView(drawView);
drawView.setOnTouchListener(this);
}

@Override public void onResume(){
super.onResume();
drawView.resume();
}

@Override public void onPause(){
super.onPause();
drawView.pause();
}

public boolean onTouch (View v, MotionEvent event) {
touch.x = (int)event.getX();
touch.y= (int)event.getY();
return true;
}

public class DrawView extends SurfaceView implements Runnable {
Thread gameloop = null;
SurfaceHolder surface;
volatile boolean running = false;
AssetManager assets = null;
BitmapFactory.Options options = null;
Bitmap incect[];
int frame = 0;

public DrawView(Context context){
super(context);
surface = getHolder();
assets = context.getAssets();
options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;

incect = new Bitmap[2];

try {
for (int n = 0; n < 2; n++){
String fileName = "incect"+Integer.toString(n+1)+".png";
InputStream istream = assets.open(fileName);
incect[n] = BitmapFactory.decodeStream(istream,null,options);
istream.close();
}
} catch (IOException e){
e.printStackTrace();
}
}

public void resume() {
running = true;
gameloop = new Thread(this);
gameloop.start();
}

public void pause() {
running = false;
boolean retry = true;
while (retry) {
try {
gameloop.join();
retry = false;
} catch (InterruptedException e){}
}
}

@Override public void run(){

Point size = new Point();
Display display = getWindowManager().getDefaultDisplay();
display.getSize(size);
Random wR = new Random();
Random hR = new Random();
int width = size.x;
int height = size.y;
int randomW = wR.nextInt(width-20)+20;
int randomH = hR.nextInt(height-20)+20;

while (running){

if(!surface.getSurface().isValid())
continue;

Canvas canvas = surface.lockCanvas();
canvas.drawColor(Color.rgb(85,107,47));
canvas.drawBitmap(incect[frame],randomW-10,randomH-10,null);
surface.unlockCanvasAndPost(canvas);
frame ++;
if (frame > 1){
frame = 0;
}

try {
Thread.sleep(500);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
}

但是当我尝试在我的手机上运行该应用程序(并触摸屏幕)时,我会返回到之前的 Activity 。截至目前,我无法在 android studio 中使用日志,所以我知道这是否是一个难以回答的问题。

最佳答案

您的 Point 触摸始终为 NULL,不是吗?可能你忘了初始化它:

touch = new Point();

如果没有这一行,变量 touch 始终为 null,因此当调用 onTouch() 时,Logcat 会说: java.lang.NullPointerException:尝试写入空对象引用上的字段“int android.graphics.Point.x”

所以在 onCreate() 或在 onTouch() 调用之前可以初始化的地方添加上面的行,希望这会有所帮助。

关于java - 获取触摸输入的 x 和 y 坐标(Android studio,Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com