Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓-我想要。。。单击按钮后,在画布中绘制图像_Android_Android Canvas - Fatal编程技术网

Android 安卓-我想要。。。单击按钮后,在画布中绘制图像

Android 安卓-我想要。。。单击按钮后,在画布中绘制图像,android,android-canvas,Android,Android Canvas,我单击arenalayout.xml中的骰子按钮(此xml由“arenalayout”类显示)。但是canvas不画char 2我想。。。如果我点击骰子按钮,然后我画字符2 注意:在我点击骰子按钮后,竞技场类中“haveFirstDiced”变量的值变为TRUE。在“竞技场”课程中,昂德劳的身体内有状况。如果“haveFirstDiced”变量的值为真,则绘制字符2 public class ArenaLayout extends Activity { private

我单击arenalayout.xml中的骰子按钮(此xml由“arenalayout”类显示)。但是canvas不画char 2我想。。。如果我点击骰子按钮,然后我画字符2

注意:在我点击骰子按钮后,竞技场类中“haveFirstDiced”变量的值变为TRUE。在“竞技场”课程中,昂德劳的身体内有状况。如果“haveFirstDiced”变量的值为真,则绘制字符2

     public class ArenaLayout extends Activity {

        private Arena arena;  
        ImageButton diceButton;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.arena_layout);
            diceButton = (ImageButton) findViewById(R.id.dice);
            dice();
        }

        private void dice() {
            diceButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    arena.dicing();
                }
            });
        }
}
这是“竞技场”课程:

 public class Arena extends View{

    private Paint p;
    private Handler threadHandler = new Handler();
    private Bitmap char1;
    private float x = 20, y = 300;
    Canvas c;
    boolean haveFirstDiced = false; 

    public Arena(Context context, AttributeSet aSet) {
        super(context, aSet);
        p = new Paint();
     }

    public void dicing() {
        new Thread(new XXX()).start();
    }

      @Override
    synchronized public void onDraw(Canvas canvas) {
      char2 = BitmapFactory.decodeResource(getResources(), R.drawable.char_2);    
      if(haveFirstDiced == true) {
              canvas.drawBitmap(char2,x,y,null);
          }
    }

   class XXX implements Runnable { 
       @Override
       public void run() {
               threadHandler.post(new Runnable() {
                   @Override
                   public void run() {
                       haveFirstDiced = true;      
                   }
               });
           }
       }


  }

这是我见过的最复杂的解决方案。不需要同步线程、可运行线程或onDraw。以下是它应该是什么:

private void dice() {
    diceButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            arena.dicing();
        }
    });
}


 public class Arena extends View{

    private Paint p;
    private Handler threadHandler = new Handler();
    private Bitmap char2;
    private float x = 20, y = 300;
    Canvas c;
    boolean haveFirstDiced = false; 

    public Arena(Context context, AttributeSet aSet) {
        super(context, aSet);
        p = new Paint();
        char2 = BitmapFactory.decodeResource(getResources(), R.drawable.char_2);    
     }

    public void dicing() {
        haveFirstDiced = true;
        invalidate();
    }

      @Override
    public void onDraw(Canvas canvas) {
      if(haveFirstDiced == true) {
              canvas.drawBitmap(char2,x,y,null);
          }
    }



  }

若你们有一个在点击按钮后在画布上绘制图像的解决方案。请发帖!!