ボタンをクリックするとキャンバスを無効にしようとしています。私は、ボタンと1つのレイアウトを持っている私はキャンバスビューを持っています。ボタンをクリックすると、円が表示されなくなります。コードでは、キャンバスを1回だけ無効にすることができます。はじめてボタンを押すと機能します。しかし、私は2回目を押すとうまくいきません。例:私がhideを押すと、それが動作することを示します。しかし、もう一度hideボタンを押すとうまくいきません。私がボタンをクリックすると、毎回CanvasViewを無効にします。だけでなく、初めて。ボタンクリックでキャンバスを無効にしますか?
public class CanvasWithButtonsActivity extends Activity {
boolean showCircle = true;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layout());
findViewById(R.id.buttonHide).setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
//HIDE
showCircle = false;
//How do i invalidate my canvas from here?
CanvasView cv = new CanvasView(getApplicationContext());
cv.invalidate();
}
});
findViewById(R.id.buttonShow).setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
//SHOW
showCircle = true;
//How do i invalidate my canvas from here?
CanvasView cv = new CanvasView(getApplicationContext());
cv.invalidate();
}
});
}
public RelativeLayout layout(){
RelativeLayout mainLayout = new RelativeLayout(this);
mainLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT, 1));
mainLayout.setBackgroundColor(Color.WHITE);
View buttonLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout.main, null);
buttonLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT, 1));
CanvasView cv = new CanvasView(getApplicationContext());
mainLayout.addView(cv);
mainLayout.addView(buttonLayout);
return mainLayout;
}
private class CanvasView extends View{
public CanvasView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
protected void onDraw(Canvas myCanvas){
Paint myPaint = new Paint();
myPaint.setColor(Color.BLUE);
if(showCircle == true)
myCanvas.drawCircle(myCanvas.getWidth()/2, 100, 20, myPaint);
}
}
}
誰かがこの質問に対する解決策を持っていると、私の多くの問題を解決できます。
私はプログラミングがあまりよくありません。参照を保持するとどういう意味ですか?どのように私は参照を保持するのですか? – greenPostIt
詳細を追加するように編集しました – EvilDuck
私が理解している限り、CanvasView cvをグローバル変数にする必要があります。私がCanvasViewを動かすと、cv = new CV(getA()); showCircleブール値の下では、アプリのクラッシュが発生します。私はどのようにクラッシュすることなくCanvasViewのグローバルインスタンスを作成しますか? – greenPostIt