2017-06-23 8 views
0

これに関連していくつか質問がありますが、私を助けてくれたものは見つかりませんでした。私のコードは以下の通りです。基本的にTouchXはOnTouchに設定されています。我々はOnDraw()を取得したら、それは私が0にtouchXの値と厄介をリセットするからそれを止めるにはどうすればよい0Androidのクラス間でグローバル変数が0にリセットされる

public class NonmultiplierSixView extends View implements View.OnTouchListener{ 
int touchX; 
int touchY; 
public NonmultiplierSixView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setOnTouchListener(this); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    int touchX = (int)event.getX(); 
    int touchY = (int)event.getY(); 
    Log.i("STATE", Integer.toString(touchX)); 
    return true; 
} 



@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Log.i("STATE", Integer.toString(touchX)); 
} 


} 

にリセットされますか?

答えて

2

touchXtouchYの2つのコピーを作成しました。これら二つ

public class NonmultiplierSixView extends View implements View.OnTouchListener { 
int touchX; 
int touchY; 

は、インスタンス変数である一方

、機能onTouchで定義されたものがローカルコピーである(即ち、それらはクラスNonmultiplierSixViewのオブジェクトに属します)。機能onDraw

public boolean onTouch(View v, MotionEvent event) { 
    int touchX = (int)event.getX(); 
    int touchY = (int)event.getY(); 

、あなたが実際にインスタンス変数touchXではなく、ローカル変数にアクセスしています。インスタンスintの変数のデフォルト値は0なので、0onDraw関数になります。

=============================

ソリューション:

この

public boolean onTouch(View v, MotionEvent event) { 
    this.touchX = (int)event.getX(); 
    this.touchY = (int)event.getY(); 
    Log.i("STATE", Integer.toString(this.touchX)); 
    return true; 
} 



@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Log.i("STATE", Integer.toString(this.touchX)); 
} 
+0

ありがとうございます試してみてください!これは非常に役に立ちました。迅速なフォローアップの質問として、画面に触れた後、どのようにonDraw()を更新しますか?私が画面に触れると、私はそれがどこに触れるかに応じてある形を描きたい。そのままですが、それはonDrawを1回だけ実行するようです。画面に触れた後、どうすればonDraw()を更新できますか?ありがとう! – mathexplorer

+0

@mathexplorer答えがあなたの問題を解決したことをうれしく思います。あなたのフォローアップについて新しい質問をしてください。 – gandalf

関連する問題