需要图片才能跳转到Android中的点击位置

时间:2012-06-18 16:00:41

标签: android

我正在编写一个虚拟操纵杆小部件,它包含一个大圆圈作为可点击区域和一个代表实际操纵杆的小圆圈。为了使操作更容易,我希望用户能够触摸较大圆圈上的任何位置,较小的圆圈将跳转到触摸位置。如果用户拖动他们的手指,我想要跟随小圆圈。当小圆圈释放时,我希望它跳回到大圆圈中心的原始位置。我正在使用相对布局,两个圆圈水平和垂直居中。

这是我正在使用的触控听众,现在它主要按我的意愿工作,除了较小的圆圈出现在触控所在的左侧。我无法弄清楚如何让它在释放时重新弹回中心。

 OnTouchListener touchListener = new OnTouchListener() {
        @Override
        public boolean onTouch(View arg0, MotionEvent event)
        {
            // TODO Auto-generated method stub
            status.setText("X: " + event.getX() + ", Y: " + event.getY());
            knob.setX(event.getX());
            knob.setY(event.getY());
            return false;
        }
    };

1 个答案:

答案 0 :(得分:0)

这些都不应该是ImageViews。您应该创建自定义视图并覆盖onDraw方法。您可以通过覆盖onTouch方法来控制绘图。看起来应该是这样的:

public class Joystick extends View {
    float touchX = -1, touchY = -1;

    @Override
    public Joystick(Context context) {
         super(context);
    }

    @Override
    public void onDraw(Canvas canvas) {
        Paint mPaint = new Paint();
        mPaint.setColor(myColor);
        mPaint.setStyle(Paint.Style.STROKE);
        float width = getMeasuredWidth();
        float height = getMeasuredHeight();
        canvas.drawCircle(width/2, height/2, mPaint); //draw outer circle

        //Draw inner circle
        if (touchX > -1 && touchY > -1) {
            canvas.drawCircle(touchX, touchY, mPaint);
        } else {
            canvas.drawCircle(width/2, height/2, mPaint);
        }
    }

    @Override
    public void onTouchEvent(MotionEvent me) {
        switch (me.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
            touchX = me.getX();
            touchY = me.getY();
            break;
        case MotionEvent.ACTION_UP:
            touchX = -1;
            touchY = -1;
        }
        invalidate();
    }
}

干杯