有几个与此相关的问题,但我找不到任何帮助我的东西。我是Android Studio的新手。这是我的情况: 我想要发生的是当我点击触摸屏幕时,它存储我在Globals.touchX和Globals.touchY中按下的位置的x和y坐标,并将它们显示在屏幕上。似乎正在发生的事情是,当我按下屏幕时,触摸坐标被正确存储,但显示它们的视图不会刷新以显示其新值。根据我能找到的答案,我尝试调用invalidate(),但我没有工作。我也看到一些人建议一个处理程序。如果这是要走的路,有人可以解释它们是什么以及它们如何尽可能简单地工作。我的代码如下。谢谢:)
public class NonmultiplierSixGame extends AppCompatActivity implements View.OnTouchListener {
private NonmultiplierSixView nonmultiplierSixView;
@Override
public boolean onTouch(View v, MotionEvent event) {
Globals.touchX = (int)event.getX();
Globals.touchY = (int)event.getY();
Log.i("GAME", Integer.toString(Globals.touchX));
Log.i("GAME", Integer.toString(Globals.touchY));
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
Globals.SetSelect(1);
break;
case MotionEvent.ACTION_UP:
Globals.SetSelect(2);
break;
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nonmultiplier_six_game);
nonmultiplierSixView = (NonmultiplierSixView)findViewById(R.id.nonmultiplierSixView);
nonmultiplierSixView.setOnTouchListener(this);
}
}
activity_nonmultiplier_six_game.xml:
<?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"
/>
public class NonmultiplierSixView extends View{
public NonmultiplierSixView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int x = getWidth();
int y = getHeight();
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
canvas.drawPaint(paint);
paint.setColor(Color.parseColor("#da4747"));
canvas.drawText(Integer.toString(Globals.touchX), 27 * x / 30, 70 * y / 84, paint);
}
}
答案 0 :(得分:1)
您确定在正确的位置呼叫invalidate()
吗?尝试在交换机中的break语句之前将invalidate()
放入每个案例中。