2016-07-07 48 views
0

我正在尝试在我触摸的地方绘制一个圆,所以我使用OnTouchListener来获取x,y坐标。 但是当我在模拟器上运行代码时,圆形不会绘制在我点击的位置。从OnTouchListener出现错误x y

public class MainActivity extends AppCompatActivity { 
    Canvas canvas; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //------------------ 

     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getRealMetrics(displaymetrics); 
     int screenWidth = displaymetrics.widthPixels;//480 
     int screenHeight = displaymetrics.heightPixels;//1920 

     Bitmap bg = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888); 

     canvas = new Canvas(bg); 
     RelativeLayout ll = (RelativeLayout) findViewById(R.id.RelativeLayoutCells); 
     ll.setBackgroundDrawable(new BitmapDrawable(bg)); 

     ll.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        float xf = event.getRawX(); 
        float yf = event.getRawY(); 
        Log.d("=", String.valueOf(x) + " " + String.valueOf(xf)); 
        Paint fillpaint= new Paint();; 
        fillpaint.setColor(Color.RED); 
        fillpaint.setStyle(Paint.Style.FILL); 
        canvas.drawCircle(xf, yf, 5, fillpaint); 
        canvas.drawCircle(x, y, 15, fillpaint); 
       } 
       Button button = (Button) findViewById(R.id.button); 
       button.setText("ghj"); 
       return false; 
      } 
     }); 
    } 
} 
+1

它画错了地方还是根本不画? – thealeksandr

+0

xf和yf应该是真正的触摸位置,你用x和y做什么? – VikingPingvin

+0

'MotionEvent#getRaw *()'方法根据整个屏幕返回坐标,而不是'View'。 –

回答

1

您不应该使用event.getRawX()。返回的值完全是原始的,不会根据您的视图进行调整。如果画布未缩放,则改为使用event.getX()。它会因为它返回而产生变化。 getX将x调整为自定义视图,但getRawX基于导致不准确的屏幕。

+0

如果您使用缩放的画布,则还必须缩放坐标。 – Zoe

+0

我试过getX,getY同样的东西。 – user3103729

+0

您是否缩放画布? – Zoe

相关问题