2013-10-23 30 views
1

我正在玩触摸画一些椭圆形,我被触摸所给出的坐标弄糊涂并将它翻译成一些椭圆形,我不知道为什么我在Y中得到了偏移,这里有一个图像来说明我的问题,一段代码和一些ouptut。
Android是RectF坐标不同于触摸坐标?

enter image description here

public class TestView extends View implements OnTouchListener 
{ 
    RectF rectf; 
    Paint paint; 

    public TestView(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     paint = new Paint(); 
     rectf = new RectF(); 
     rectf.set(30, 80, 80, 30); 
     this.setOnTouchListener(this); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 
     canvas.save(); 
     canvas.drawOval(rectf, paint); 
     canvas.restore(); 
    } 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
    float x=event.getRawX(); 
    float y=event.getRawY(); 
     rectf.set(x-2, y+2, x+2, y-2); 
     Log.v("", "****************"); 
     Log.v("x "+x, "y "+y); 
     Log.v("rect", rectf.left +" " + rectf.right +" " +rectf.top +" " +rectf.bottom); 
     Log.v("center", rectf.centerX()+" "+rectf.centerY()); 
     invalidate();// 
    return true; 
    } 
} 

输出

"**************** 
x 211.0: y 560.0 
rect: 209.0 213.0 562.0 558.0 
center: 211.0 560.0 
:**************** 
x 220.0: y 547.0 
rect: 218.0 222.0 549.0 545.0 
center: 220.0 547.0 

任何帮助,将不胜感激

+0

Log.d中的rect是什么? – johntheripp3r

+0

这是一个错字,它是rectf,谢谢,但已经解决了 –

回答

3

如果由于某种原因要再次显示标题栏,那么你就需要获得X和Y坐标视图画布区域不是整个屏幕。

您应该使用event.getX()和.getY()而不是.getRawX()和.getRawY()。

+0

这就是我喜欢的方式:) –

0

解决!
它的标题栏偏移:)我已经添加到setTheme(android.R.style.Theme_Light_NoTitleBar_Fullscreen);和MainActivity它的工作完美