[英]OnTouch not running when touched
運行代碼時沒有出現任何錯誤,但是觸摸屏幕沒有任何反應。 全局變量select的值應該更改,但是什么也不會發生。
這是代碼
public class NonmultiplierSixGame extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nonmultiplier_six_game);
}
}
activity_nonmultiplier_six_game:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.alexandermain.example_5.NonmultiplierSixGame">
<com.example.alexandermain.example_5.views.NonmultiplierSixView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nonmultiplierSixView"
android:background="@color/colorPrimary"
/>
</android.support.constraint.ConstraintLayout>
NonmultiplierSixView類:
public class NonmultiplierSixView extends View implements View.OnTouchListener{
@Override
protected void onDraw(Canvas canvas){
//bunch of shapes
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
Globals.SetSelect(1);
break;
case MotionEvent.ACTION_UP:
Globals.SetSelect(2);
break;
}
return true;
}
public NonmultiplierSixView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
編輯:這是Globals類public class Globals {
public static int select=-2;
public static void SetSelect(int t) {
select = t;
}
public static int GetSelect() {
return(select);
}
}
在實現OntouchListener時,需要在Context上設置TheListener。
只需將其添加到您的構造函數中即可:它應該像這樣:
public NonmultiplierSixView(Context context, AttributeSet attrs) {
super(context, attrs);
setOnTouchListener(this);
}
我是一個沒有經驗的程序員,但是我今天早些時候創建了onTouch監聽器,效果很好,
嘗試將onTouch方法更改為如下所示:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
Globals.SetSelect(1);
return false;
case MotionEvent.ACTION_UP:
Globals.SetSelect(2);
return false;
}
return false;
}
如果無法解決您的問題,請您提前表示歉意。
無需實現View.OnTouchListener
, View類已經具有其onTouchEvent(MotionEvent event)
方法 。 嘗試這個:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
它一定會工作。 並檢查一下 。
onDraw方法連續重復。 因此,也許即使您觸摸了對象,由於onDraw,它每次都被重繪到其初始位置。 因此,您想要做的是例如設置一個布爾isPostionned,這樣您的對象將僅在初始位置繪制1次。 因此布爾值最初將為false,然后在繪制項目后將其設置為true。
例如:在NonmultiplierSixView類中聲明
boolean isPositionned = false;
比在onDraw中:
if (!isPositionned){
//code to position you object
isPositionned = true;
}
(以防您打算移動形狀)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.