jac*_*lin 15 android drawing touch-event
我想要做的是绘制一条跟随我的手指的线.我已经创建了一个自定义视图,我有一个onTouchEvent()
可行的.
我可以onDraw()
毫不费力地在方法中绘制静态线.
当我的手指移动时,我不确定如何画线.
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
Log.e(TAG, " - DOWN -");
Log.e(TAG, " getX: " + event.getX());
break;
}
case MotionEvent.ACTION_UP: {
Log.e(TAG, " - UP -");
Log.e(TAG, " getX: " + event.getX());
break;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
你曾经做过一段时间的任何提示可以给出什么?
我是否需要设置坐标onTouchEvent()
并不断使视图无效,以便小线段绘制?
最后,我只想用手指在屏幕上进行基本涂鸦,以进行此实验.
And*_*ith 30
您只跟踪上下事件.跟踪ACTION_MOVE事件.请注意它会连续跟踪,即使该人的手指没有明显移动.你的代码应该是这样的:
ACTION_DOWN:存储位置.
ACTION_MOVE:如果位置与存储位置不同,则从存储位置绘制一条线到当前位置,并将存储位置更新为当前位置.
ACTION_UP:停止.
在ACTION_MOVE位中,最好检查位置是否与存储位置相距至少2或3个像素.如果您要存储所有绘图点,以便稍后可以对数据执行某些操作,那么可能会将其增加到10像素,这样您就不会为简单的线条获得数百个点.
这就是我最终做的事情.希望这有助于其他一些初学者入门.
我有一个Sprite类,表示我想在屏幕上移动的对象:
public class Sprite {
private final String TAG = "Sprite";
private Drawable drawable;
private int x; // the X coordinate
private int y; // the Y coordinate
private boolean touched; // if droid is touched/picked up
private Speed speed; // the speed with its directions
public Sprite(Drawable drawable, int x, int y) {
this.drawable = drawable;
this.x = x;
this.y = y;
this.speed = new Speed();
}
public void draw(Canvas canvas) {
drawable.setBounds(new Rect(x, y, x+drawable.getIntrinsicWidth(), y+drawable.getIntrinsicHeight()));
drawable.draw(canvas);
}
public void move() {
if (!touched) {
x += (speed.getXv() * speed.getxDirection());
y += (speed.getYv() * speed.getyDirection());
}
}
public void handleActionDown(int eventX, int eventY) {
if (eventX >= (x - bitmap.getWidth() / 2) && (eventX <= (x + bitmap.getWidth() / 2))) {
if (eventY >= (y - bitmap.getHeight() / 2) && (y <= (y + bitmap.getHeight() / 2))) {
// droid touched
setTouched(true);
} else {
setTouched(false);
}
} else {
setTouched(false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个主要的游戏循环.循环并调用我的mainPanel的渲染和更新方法,如下所示:
public void render(Canvas canvas) {
canvas.drawColor(Color.BLACK);
sprite.draw(canvas);
}
public void update() {
sprite.move();
}
Run Code Online (Sandbox Code Playgroud)
精灵移动的位置在动作事件捕获中处理:
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// the gestures
if (sprite.isTouched()) {
sprite.setX((int) event.getX());
sprite.setY((int) event.getY());
}
}
Run Code Online (Sandbox Code Playgroud)
希望这很有帮助.如果我裁掉太多而且你有什么东西不让我知道.
下一步,使对象跟随线!
归档时间: |
|
查看次数: |
47463 次 |
最近记录: |