我运行代码时没有收到任何错误,但触摸屏幕时没有任何反应。全局变量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类 公共课Globals {
public static int select=-2;
public static void SetSelect(int t) {
select = t;
}
public static int GetSelect() {
return(select);
}
}
答案 0 :(得分:1)
实现OntouchListener时,需要在Context上设置监听器。
只需在构造函数中添加它: 它应该是这样的:
public NonmultiplierSixView(Context context, AttributeSet attrs) {
super(context, attrs);
setOnTouchListener(this);
}
答案 1 :(得分:0)
我是一个非常缺乏经验的程序员,但我今天早些时候创建了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;
}
如果它不适合你,我会提前抱歉..
答案 2 :(得分:0)
不需要实现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;
}
它肯定会起作用。并检查this。
答案 3 :(得分:0)
onDraw方法不断重复。 所以,也许,即使你触摸你的对象,每次都会因为onDraw而重新绘制到它的初始位置。 所以你想做的是例如设置一个布尔值isPostionned,所以你的对象只会在初始位置被绘制一次。 所以布尔值最初是假的,然后在绘制项目后将其设置为true。
例如:在NonmultiplierSixView类中声明
boolean isPositionned = false;
比onDraw:
if (!isPositionned){
//code to position you object
isPositionned = true;
}
(这是为了你的意图是移动形状)