Android 自定义视图显示正确,无法在onClick事件后重新绘制(无效)
我在安卓系统中遇到了重绘和失效问题。我有一个简单的活动,创建一个按钮并显示我的自定义视图(Android 自定义视图显示正确,无法在onClick事件后重新绘制(无效),android,repaint,Android,Repaint,我在安卓系统中遇到了重绘和失效问题。我有一个简单的活动,创建一个按钮并显示我的自定义视图(drawGridclass)。我正在尝试在onClick事件之后重新绘制网格加上一条线。我的主要问题是,如何从drawGrid类中重新绘制?在这里,任何朝着正确方向的轻推都将受到赞赏 public class MainActivity extends Activity implements View.OnClickListener { DrawGrid drawGrid; @Overrid
drawGrid
class)。我正在尝试在onClick事件之后重新绘制网格加上一条线。我的主要问题是,如何从drawGrid
类中重新绘制?在这里,任何朝着正确方向的轻推都将受到赞赏
public class MainActivity extends Activity implements View.OnClickListener {
DrawGrid drawGrid;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawGrid = new DrawGrid(this);
drawGrid.setBackgroundColor(Color.BLACK);
setContentView(R.layout.activity_main);
View ballButton2 = findViewById(R.id.right_btn);
ballButton2.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.right_btn:
drawGrid.move();
}
}
}
public class DrawGrid extends View {
int x = 25;
int y = 25;
int index = 0;
public ArrayList<ArrayList<Integer>> playerOneRed = new ArrayList<>(100);
Paint paint = new Paint();
public DrawGrid(Context context) {
super(context);
paint.setColor(Color.BLUE);
paint.setStrokeWidth(2);
this.setBackgroundColor(Color.BLACK);
}
public DrawGrid(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public DrawGrid(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
paint.setColor(Color.BLUE);
paint.setStrokeWidth(2);
this.setBackgroundColor(Color.BLACK);
}
@Override
public void onDraw(Canvas canvas) {
Log.d("MyApp", "x is " + x);
paint.setColor(Color.BLUE);
paint.setStrokeWidth(3);
for (int i = 0; i < 3000; i = i + 40) {
canvas.drawLine(i, 0, i, 3000, paint);
}
for (int i = 0; i < 3000; i = i + 40) {
canvas.drawLine(0, i, 3000, i, paint);
}
paint.setColor(Color.RED);
paint.setStrokeWidth(8);
// canvas.drawLine(0, 1000, 3000, 1000, paint);
for (ArrayList<Integer> iter : playerOneRed) {
canvas.drawLine(iter.get(0), iter.get(1), iter.get(2), iter.get(3), paint);
}
}
public void move() {
playerOneRed.add(new ArrayList<Integer>(4));
playerOneRed.get(index).add(0);
playerOneRed.get(index).add(1000);
playerOneRed.get(index).add(x + 250);
x = x + 250;
playerOneRed.get(index).add(1000);
index++;
Invalidate();
}
}
public类MainActivity扩展活动实现View.OnClickListener{
DrawGrid DrawGrid;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
drawGrid=新的drawGrid(本);
drawGrid.setBackgroundColor(颜色:黑色);
setContentView(R.layout.activity_main);
视图ballButton2=findViewById(R.id.right\u btn);
ballButton2.setOnClickListener(此);
}
公共void onClick(视图v){
开关(v.getId()){
案例R.id.right\u btn:
drawGrid.move();
}
}
}
公共类DrawGrid扩展视图{
int x=25;
int y=25;
int指数=0;
public ArrayList playernered=新的ArrayList(100);
油漆=新油漆();
公共绘图网格(上下文){
超级(上下文);
油漆。设置颜色(颜色。蓝色);
油漆。设置行程宽度(2);
这个.setBackgroundColor(颜色.黑色);
}
公共DrawGrid(上下文、属性集属性){
超级(上下文,attrs);
init(上下文);
}
公共DrawGrid(上下文上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
init(上下文);
}
私有void init(上下文){
油漆。设置颜色(颜色。蓝色);
油漆。设置行程宽度(2);
这个.setBackgroundColor(颜色.黑色);
}
@凌驾
公共空白onDraw(画布){
Log.d(“MyApp”,“x是”+x);
油漆。设置颜色(颜色。蓝色);
油漆。设置行程宽度(3);
对于(int i=0;i<3000;i=i+40){
帆布.抽绳(i,0,i,3000,油漆);
}
对于(int i=0;i<3000;i=i+40){
帆布.抽绳(0,i,3000,i,油漆);
}
油漆。设置颜色(颜色。红色);
油漆。设置行程宽度(8);
//帆布。抽绳(0,1000,3000,1000,油漆);
用于(ArrayList iter:PlayerEnred){
帆布拉丝(iter.get(0)、iter.get(1)、iter.get(2)、iter.get(3)、绘画);
}
}
公开作废动议(){
添加(新ArrayList(4));
playonered.get(index.add)(0);
playernered.get(index.add)(1000);
playernered.get(index.add)(x+250);
x=x+250;
playernered.get(index.add)(1000);
索引++;
使无效();
}
}