萌新一只,現在小小的腦袋里有大大的疑惑:
為什么我要畫的小方塊就是不顯示??
我想要實作方塊受按鈕控制,可以自由在螢屏中移動。附上主要代碼,請大神解答:
/////////////////////////////////////////////////////////
public class block extends View {
Paint paint; //繪圖
Paint paint1; //繪圖
final int width = 780;
final int height = 1560;
final int space = 60; //長寬間隔
int vertz = 0;//橫向
int hortz = 0;//豎向
int i,j;
Canvas canv;//定義畫布(背景)
private Bitmap mBitmap;//定義位圖
int a = 0,b = 0,c = 60,d = 60;
public block(Context context,int width, int height) {
super(context);
paint = new Paint();
paint.setColor(Color.YELLOW);//設定繪圖線的顏色
paint.setStrokeJoin(Paint.Join.ROUND);//設定連接處的樣式
paint.setStrokeCap(Paint.Cap.ROUND);//線條樣式
paint.setStrokeWidth(3);//線條寬度
paint1 = new Paint();
paint1.setColor(Color.GREEN);//設定繪圖線的顏色
// 宣告位圖
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// 宣告畫布
canv = new Canvas(mBitmap);
}
protected void onDraw(final Canvas canvas) {
canvas.drawBitmap(mBitmap, 0, 0, null);
//設定網格線的顏色
canvas.drawColor(Color.GRAY);
//設定網格線的長、寬
for (j = 0;j < 27;j++) {
canvas.drawLine(0, vertz, width, vertz, paint);
vertz += space;
}
for(i=0;i<14;i++) {
canvas.drawLine(hortz, 0, hortz, height, paint);
hortz += space;
}
}
public void beijing(Canvas canvas)
{
canvas.drawBitmap(mBitmap, 0, 0, null);
//設定網格線的顏色
canvas.drawColor(Color.GRAY);
//設定網格線的長、寬
for (j = 0;j < 27;j++) {
canvas.drawLine(0, vertz, width, vertz, paint);
vertz += space;
}
for(i=0;i<14;i++) {
canvas.drawLine(hortz, 0, hortz, height, paint);
hortz += space;
}
}
}
/////////////////////////////////////////////////////////////////
public class MainActivity extends AppCompatActivity {
private FrameLayout frameLayout;
private block block1;
private ImageView imgView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
frameLayout = (FrameLayout)findViewById(R.id.FL);
imgView = (ImageView)findViewById(R.id.imgView);
block1 = new block(this,780,1560);
frameLayout.addView(block1);
}
public void up(View view) {
//block1.onDraw(block1.canv);
block1.beijing(block1.canv);
block1.canv.drawRect(block1.a,block1.b-60,block1.c,block1.d-60,block1.paint1);
Toast.makeText(MainActivity.this,"向上",Toast.LENGTH_SHORT).show();
}
public void down(View view) {
// block1.onDraw(block1.canv);
block1.beijing(block1.canv);
block1.canv.drawRect(block1.a,block1.b+60,block1.c,block1.d+60,block1.paint1);
Toast.makeText(MainActivity.this,"向下",Toast.LENGTH_SHORT).show();
}
public void left(View view) {
//block1.onDraw(block1.canv);
block1.beijing(block1.canv);
block1.canv.drawRect(block1.a-60,block1.b,block1.c-60,block1.d,block1.paint1);
Toast.makeText(MainActivity.this,"向左",Toast.LENGTH_SHORT).show();
}
public void right(View view) {
//block1.onDraw(block1.canv);
block1.beijing(block1.canv);
block1.canv.drawRect(block1.a+60,block1.b,block1.c+60,block1.d,block1.paint1);
Toast.makeText(MainActivity.this,"向右",Toast.LENGTH_SHORT).show();
}
}
uj5u.com熱心網友回復:
你好像少了一個構造方法。uj5u.com熱心網友回復:
大佬能詳細說一下嘛
uj5u.com熱心網友回復:
1、block中設定setWillNotDraw(false),不然ondraw不會執行2、up,down等方法中執行block1.canv會繪圖,但是這個自己new的canv沒有地方是去顯示。可以給block設定標記,然后再ondraw的回呼中,使用回呼的canvs去繪制
uj5u.com熱心網友回復:
謝謝謝謝,我去試試
uj5u.com熱心網友回復:
給block設定標記是怎么一回事啊,這里沒明白
uj5u.com熱心網友回復:
比如block1提供方法public void setDirection(int type)//0 左,1 右,2 上,3 下{
this.type=type;
invalidate();
}
然后:ondraw(final Canvas canvas){
.....//你現在的代碼
if(type==0){
beijing(canvas);
canvas.drawRect(block1.a-60,block1.b,block1.c-60,block1.d,block1.paint1);
Toast.makeText(MainActivity.this,"向左",Toast.LENGTH_SHORT).show();
}else if(typ2==1){
//TODO
}else{
//TODO
}
}
uj5u.com熱心網友回復:
哦哦意思就是把canvas放到ondraw去顯示嘛
uj5u.com熱心網友回復:
解決問題了,感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/13921.html
標籤:Android
上一篇:求解 現在微信上防封短鏈接 是怎么生成 原理有人幫說下嗎?
下一篇:怎么才能限制手機號碼位數
