- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我运行下面的代码时,一切正常,这是一个简单的应用程序,带有三个可以移动的球...
public class dragndrop extends Activity {
/** Called when the activity is first created. */
private ColorBall[] colorballs = new ColorBall[3]; // array that holds the balls
private static final String TAG="MyTAG";
DrawView myView;
private int balID = 0; // variable to know what ball is being dragged
int X;
int Y;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Point point1 = new Point();
point1.x = 50;
point1.y = 20;
Point point2 = new Point();
point2.x = 100;
point2.y = 20;
Point point3 = new Point();
point3.x = 150;
point3.y = 20;
// declare each ball with the ColorBall class
colorballs[0] = new ColorBall(this,R.drawable.bol_groen, point1);
colorballs[1] = new ColorBall(this,R.drawable.bol_rood, point2);
colorballs[2] = new ColorBall(this,R.drawable.bol_blauw, point3);
myView = new DrawView(this);
setContentView(myView);
}
public class DrawView extends View {
public DrawView(Context context) {
super(context);
setFocusable(true); //necessary for getting the touch events
// setting the start point for the balls
}
// the method that draws the balls
@Override protected void onDraw(Canvas canvas) {
//draw the balls on the canvas
for (ColorBall ball : colorballs) {
canvas.drawBitmap(ball.getBitmap(), ball.getX(), ball.getY(), null);
}
}
// events when touching the screen
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
X = (int)event.getX();
Y = (int)event.getY();
switch (eventaction ) {
case MotionEvent.ACTION_DOWN: // touch down so check if the finger is on a ball
balID = 0;
for (ColorBall ball : colorballs) {
Log.d(TAG,"inside action down inside for coords:"+X+" coords: "+Y);
Log.d(TAG,"ball coords:"+ball.getX()+" coords: "+ball.getY());
int x =X;
int y =Y;
Log.d(TAG,"lalalalalala"+x+" coords: "+y);
if (x > ball.getX() && x < ball.getX()+50 && y > ball.getY() && y < ball.getY()+50){//if (X > ball.getX() && X < ball.getX()+50 && Y > ball.getY() && Y < ball.getY()+50){
Log.d(TAG,"inside ball coords!!!!!!!!!!!!!!!!!!!!!!!!:"+ball.getX()+" coords: "+ball.getY());
balID = ball.getID();
break;
}
}
break;
case MotionEvent.ACTION_MOVE: // touch drag with the ball
// move the balls the same as the finger
if (balID > 0) {
colorballs[balID-1].setX(X-25);
colorballs[balID-1].setY(Y-25);
}
break;
case MotionEvent.ACTION_UP:
// touch drop - just do things here after dropping
break;
}
// redraw the canvas
myView.invalidate();
return true;
}
}
}
但是当我尝试处理主要 Activity 中的 onTouchevent 时不起作用,奇怪的是它无法读取简单变量(x,y)!!!我不明白为什么会这样,似乎只有在 View 中才能使它们变红!!!
public class dragndrop extends Activity {
/** Called when the activity is first created. */
private ColorBall[] colorballs = new ColorBall[3]; // array that holds the balls
private static final String TAG="MyTAG";
DrawView myView;
private int balID = 0; // variable to know what ball is being dragged
int X;
int Y;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Point point1 = new Point();
point1.x = 50;
point1.y = 20;
Point point2 = new Point();
point2.x = 100;
point2.y = 20;
Point point3 = new Point();
point3.x = 150;
point3.y = 20;
// declare each ball with the ColorBall class
colorballs[0] = new ColorBall(this,R.drawable.bol_groen, point1);
colorballs[1] = new ColorBall(this,R.drawable.bol_rood, point2);
colorballs[2] = new ColorBall(this,R.drawable.bol_blauw, point3);
myView = new DrawView(this);
setContentView(myView);
}
// events when touching the screen
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
X = (int)event.getX();
Y = (int)event.getY();
switch (eventaction ) {
case MotionEvent.ACTION_DOWN: // touch down so check if the finger is on a ball
balID = 0;
for (ColorBall ball : colorballs) {
Log.d(TAG,"inside action down inside for coords:"+X+" coords: "+Y);
Log.d(TAG,"ball coords:"+ball.getX()+" coords: "+ball.getY());
int x =X;
int y =Y;
Log.d(TAG,"lalalalalala"+x+" coords: "+y);
if (x > ball.getX() && x < ball.getX()+50 && y > ball.getY() && y < ball.getY()+50){//if (X > ball.getX() && X < ball.getX()+50 && Y > ball.getY() && Y < ball.getY()+50){
Log.d(TAG,"inside ball coords!!:"+ball.getX()+" coords: "+ball.getY());
balID = ball.getID();
break;
}
}
break;
case MotionEvent.ACTION_MOVE: // touch drag with the ball
// move the balls the same as the finger
if (balID > 0) {
colorballs[balID-1].setX(X-25);
colorballs[balID-1].setY(Y-25);
}
break;
case MotionEvent.ACTION_UP:
// touch drop - just do things here after dropping
break;
}
// redraw the canvas
myView.invalidate();
return true;
}
public class DrawView extends View {
public DrawView(Context context) {
super(context);
setFocusable(true); //necessary for getting the touch events
// setting the start point for the balls
}
// the method that draws the balls
@Override protected void onDraw(Canvas canvas) {
//canvas.drawColor(0xFFCCCCCC); //if you want another background color
//draw the balls on the canvas
for (ColorBall ball : colorballs) {
canvas.drawBitmap(ball.getBitmap(), ball.getX(), ball.getY(), null);
}
}
}
}
谁知道为什么?
是的@bigstones onTouchevent 正在工作,它捕获所有操作,问题是如果我在 Activity 中有 ontouchevent 代码,变量 X、Y 似乎不起作用,尽管它们有一个值并且我可以打印它(或日志)我说的是经过测试的,我已经尝试将 if() 语句(getX,getY)中的所有值更改为整数,但它不仅适用于 X,Y .....检查请再次输入代码!谢谢!
最佳答案
找到了!
我发现问题在于应该注册某种监听器的布局,所以我这样做了:
我将此代码添加到我的主类中:
private OnClickListener previewListener = new OnClickListener() {
@Override
public void onClick(View v) {
System.err.println("I've been clicked");
}
};
onCreate 方法的这一行:
previewLayout.setOnClickListener(previewListener);
成功了!
关于android - onTouchevent() 问题android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798751/
我有一个自定义布局捏缩放代码作为父布局和一个处理点击功能的子布局。因此我使用了触摸拦截,但问题是它不知道什么时候点击或拖动。 @Override public boolean onInter
我正在制作一个简单逻辑电路的单屏应用程序。我正在使用 onTouchEvent 来处理用户交互。我现在正在使用 ACTION_UP、ACTION_MOVE 和 ACTION_DOWN,但这只允许我使用
我为 Android 创建了一个非常简单的乒乓应用程序。 看起来不错,但我有一个问题: 我尝试执行 onScreenTouch 事件,以便将 Racket 放置在用户的触摸位置。 我的问题是 - 在哪
我目前正在开发我的第一个多点触控 Android 应用程序,但在使用 onTouchEvent() 时遇到了一些困难。我使用了在线教程中的一些代码,这似乎为我提供了屏幕上每次触摸的正确指针 ID 信息
以下:https://developer.android.com/training/gestures/movement.html 用于处理onTouchEvent中的移动。我的问题是,即使按照链接的教
除了public class MySurfaceView extends SurfaceView Implements SurfaceHolder.Callback之外,是否可以在类中创建 OnTou
我正在尝试创建一个子类来扩展和覆盖 onTouchEvent 方法。但是,我无法这样做,因为我不完全确定如何去做。 我可以将重写放在扩展 Activity 的公共(public)类中,还是必须是扩展
My full code here 我正在学习 Android 开发,并且正在尝试创建一个简单的单词搜索游戏。首先,我创建了一个 LetterTile 类,它代表屏幕上的一个字母,这个类有自己绘制的方
我有简单的 Activity : public class MainActivity extends Activity { @Override protected void onCre
我有一个 View v2 扩展了另一个 View v1。父 View v1 有一个 onTouchEvent,但我希望 subview v2 不使用 onTouchEvent。 我在 subview
我在 Android Dialog 中实现了按钮的 onLongClickListener,它使用计时器自动减少数字。这是代码 myIncreaseTimer = new Timer(); final
当我运行下面的代码时,一切正常,这是一个简单的应用程序,带有三个可以移动的球... public class dragndrop extends Activity { /** Called w
我正在使用 MapView 创建 Android 应用程序。我需要对用户的触摸事件使用react。我尝试使用 dispatchTouchEvent 在 onTouchEvent 中处理一些操作。但是这
我的第一个布局没有显示任何内容。它上面有一个显示图像的第二个布局。如何将 onTouchEvent 添加到第二个布局?(我问这个是因为 OnTouchEvent 只影响我的第一个布局......)它是
我正在开发 Android 2.1 API 7 应用。 在我的 Activity 中,我添加了 onTouchEvent() 回调来处理 screen touch 事件: public class M
谁能向我解释为什么 onTouchEvent 执行了两次,我怎样才能将它设置为只运行一次?我找不到解释。谢谢。 @Override public void onCreate(Bundle savedI
在我的应用程序中,我需要同时处理移动和点击事件。 点击是一个 ACTION_DOWN Action 、几个 ACTION_MOVE Action 和一个 ACTION_UP Action 的序列。理论
我正在尝试触摸应用程序的区域以在屏幕上放置一个“与”门。因此,当我触摸与门区域,然后再次触摸将其放置在电路上时,门会在我触摸的位置绘制,但一旦我再次触摸,它就会消失。 我使用canvas.drawBi
我有 GraphicView ,它扩展了 SurfaceView 。我需要它来绘制图形。我还需要 onTouchEvent。但问题是......我不知道如何描述它:)这是我的代码: public cl
我正在创建一个 Android 游戏,并且有一个像这样的 onTouchEvent : @Override public boolean onTouchEvent(MotionEvent event
我是一名优秀的程序员,十分优秀!