Android:OnTouch没有响应。
我想要在触摸视图时执行操作。但是,触动没有回应。该应用程序不会崩溃,它似乎忽略它。Android:OnTouch没有响应。
public class CustomDrawableView extends View implements OnTouchListener
{
static final int width = 100;
static final int height = 50;
public CustomDrawableView(Context context)
{
super(context);
setFocusable(true);
setOnTouchListener(mCustomDrawableView);
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x, y, x + width, y + height);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
x = 400;
return true;
}
else {
x = 300;
return false;
}
}
protected void onDraw(Canvas canvas)
{
int mCanvasHeight = canvas.getHeight();
int mCanvasWidth = canvas.getWidth();
canvas.save();
canvas.rotate(R,x,y);
if (y >= mCanvasHeight-100) {
y = 0;
}
RectF oval = new RectF(x, y, x + width, y
+ height); // set bounds of rectangle
Paint p = new Paint(); // set some paint options
p.setColor(Color.BLUE);
canvas.drawOval(oval, p);
canvas.restore();
invalidate();
}
}
我试了一堆不同的代码来修复它。除了将setOnTouchListener(mCustomDrawable)更改为mCustomDrawableView.setOnTouchListener(this)应用程序崩溃之外,它没有任何功能。活动中还有更多的代码,我没有提出。
我猜你相信onTouch()
没有启动,因为你没有看到你的图形变化,以响应x
或其他任何变化。如果是这样,看起来你错过了在你的触摸处理程序中呼叫invalidate()
,导致View
重新自我重绘(通过呼叫onDraw()
)。
此外,你有一个invalidate()
其实onDraw()
其本身真的不应该在那里。这肯定会导致你的View
反复重绘自己 - 我想 - 实际上,我想你应该看到更新,因为那里。但这不是你应该制作一个View
动画的方式;您应该使用Thread
或Handler
来安排定期的定期invalidate()
或其他一些方法来定期安排更新。
此外,您应该不需要实施“OnTouchListener”,只需按照以上步骤覆盖onTouch()
即可。有几种方法可以检测View
的触摸事件:(1)覆盖onTouch()
,就像您已完成的那样,获取该触摸事件View
。 (2)使用注册侦听器。后一个选项使您可以让听众倾听来自一个View
或多个View
的触摸事件,并且在注册的View
自己的看到它们之前,它还“看到”触摸事件。
我看到的另一件事是,当你得到一个ACTION_DOWN事件时,你将x
设置为400,但是对于任何其他类型的事件,比如ACTION_MOVE,你将它设置为300。考虑到在ACTION_DOWN之后,保持足够的手指仍然不会立即产生一串ACTION_MOVE事件实际上是非常困难的,也许您在x
处于400或其他时候从未看到图形。
您确实需要发布一个完整的示例(例如,您发布的代码有setOnTouchListener(mCustomDrawableView)
,其中mCustomDrawableView
尚未在任何地方定义)以及来自Logcat的特定错误。此外,您应该使用调试器来查看您的onTouch
是否执行过(在其中插入一个断点)。
此外,你应该接受一些答案。
什么说logcat? – poitroae 2012-02-14 19:29:50