java使活动中的自定义视图无效
单击菜单按钮时,我试图重新绘制自定义视图。我知道invalidate会强制再次调用onDraw,但这似乎不起作用
这里是我的一些代码,有400多行,所以我只是把它缩减到我认为重要的部分
public class Project2Activity extends Activity {
private DrawViewProject2 dvp2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new DrawViewProject2(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.project2, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.new_game:
newGame();
break;
case R.id.game_stats:
gameStats();
break;
}
return false;
}
public void newGame(){
randomPosition = 0;
randomValue = 0;
xLocationForX.clear();
yLocationForX.clear();
xLocationForO.clear();
yLocationForO.clear();
winCheck = false;
tieCount = 0;
for(int i = 0; i < squares.length; i++){
squares[i] = 0;
}
dvp2 = new DrawViewProject2(getApplicationContext());
/**** THIS IS WHERE IM TRYING TO INVALIDATE IT ****/
dvp2.invalidate();
}
class DrawViewProject2 extends View implements OnTouchListener{
/**
* Constructor method.
* @param context
*/
public DrawViewProject2(Context context){
super(context);
this.setOnTouchListener(this);
}
@Override
protected void onDraw(Canvas canvas){
// Set application background color.
canvas.drawColor(Color.rgb(0, 139, 103));
// Set Square color and draw squares.
paint.setColor(Color.rgb(0, 220, 0));
drawAllSquares(15, 15, 251, 251, canvas);
xReDrawAll(canvas);
oReDrawAll(canvas);
// ....some code here
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// .... some code here
return true;
}
/**
* Used for Re drawing all X's and adding a new X
* using the x and y coordinates.
* @param x
* @param y
* @param canvas
*/
public void xReDrawAll(float x, float y, Canvas canvas){
//Holds past X coordinates and redraws them all.
xLocationForX.add(x);
yLocationForX.add(y);
for(int i = 0, e = 0; i <xLocationForX.size(); i++){
//X shape for x player
paint.setColor(Color.BLACK);
paint.setTextSize(300f);
canvas.drawText("X", xLocationForX.get(i), yLocationForX.get(i), paint);
}
}
/**
* Used for Re drawing all O's
* @param canvas
*/
public void xReDrawAll(Canvas canvas){
for(int i = 0, e = 0; i <xLocationForX.size(); i++){
//X shape for x player
paint.setColor(Color.BLACK);
paint.setTextSize(300f);
canvas.drawText("X", xLocationForX.get(i), yLocationForX.get(i), paint);
}
}
// .... lot more code down here.
我也尝试过postInvalidate,但也没有任何效果
我的应用程序运行良好,当有人点击菜单中的新游戏时,我只需要重新绘制
共 (0) 个答案