2017-06-01 125 views
0

我是Android Studio新手,我正在開發我的第一款真實遊戲。我在獲取和存儲鼠標座標時遇到了問題。基本上,無論何時觸摸屏幕,我都需要根據點擊的位置進行操作。以下是我的代碼。如何在android studio中訪問鼠標座標

公共類NonmultiplierSixGame延伸AppCompatActivity {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(new MyView(this)); 

} 


public class MyView extends View implements View.OnTouchListener{ 
    public MyView(Context context){ 
     super(context); 
    } 

    @Override 
    public boolean onTouch(View MyView, MotionEvent event) { 
     Globals.SetSelect(-2); 
     float mx = event.getX(); 
     float my = event.getY(); 

     if (mx > 10 && my > 10) { 
      Globals.SetSelect(1); 
     } 
     else { 
      Globals.SetSelect(0); 
     } 
     return true; 

    } 

    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     //I have a bunch of shapes and text here 
     } 
    } 

選擇是一個公共靜態INT被存儲在一個文件Globals.java和最初被設置爲-1。當我運行代碼時,當我點擊任何地方時,select的值不會改變。 我試圖尋找一個答案,但我無法找到任何東西,所以我決定讓一個堆棧溢出帳戶,並問一個問題:)

回答

0

document可能有助於你可以得到MyView鼠標座標這樣:

public class MyView extends View implements View.OnTouchListener{ 

public MyView(Context context) { 
    super(context); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 
      break; 
     case MotionEvent.ACTION_MOVE: 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
     default: 
      break; 
    } 
    return true; 
    } 
} 

編輯:

閱讀文件LayoutTouchEvent會有所幫助。你應該把你的MyView成佈局,這裏是我的代碼,它工作正常:

HomeActivity:

setContentView(R.layout.activity_main); 

activity_main:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

    <com.example.myapplication.MyView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/myView" 
     android:background="@color/colorPrimary" 
     /> 
</LinearLayout> 

MyView的:

public MyView(Context context) { 
    super(context); 
} 

public MyView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()){ 
     case MotionEvent.ACTION_MOVE: 
     case MotionEvent.ACTION_DOWN: 
      Log.e("TAG","================== TouchEvent"); 

      break; 
     case MotionEvent.ACTION_UP: 
      return true; 
    } 

    return super.onTouchEvent(event); 
} 

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    //I have a bunch of shapes and text here 
} 
+0

我更換使用以下代碼的OnClick函數:public boolean onTouchEvent(View v,MotionEvent event){ float mx = event.getX(); float my = event.getY(); if(mx> 10 && my> 10)Globals.SetSelect(1); } else { Globals.SetSelect(0); } return true; }但它仍然不起作用。我是否需要根據上述使用哪個事件將它分成幾個案例? – mathexplorer

+0

他們兩人都會爲你工作。 :) –

+0

非常感謝您的幫助。當我運行上面的代碼時,它仍然不起作用。在編輯器中,當我將光標移到onTouchEvent上時,它說:「方法'onTouchEvent(android.view.View,android.view.MotionEvent)'從不使用」。這是問題的一部分嗎?再次感謝,我非常感謝幫助:) – mathexplorer