我正在尝试为电路构建应用程序。主屏幕基本上是使用多个组件设计电路的地方。要选择组件,可以使用一个按钮将用户带到下一个活动。此活动显示您可以选择的所有组件。所以我有两个活动类和一个Surface View类。主活动类称为CircuitDesigner,它设置为contentview设置为名为GameView的surfaceview类。第二个活动类叫做盖茨。
例如,如果我选择一个“And”门组件,那么从gate类开始,我将被带回主活动,我可以将门放在那里。虽然这可以使用以下代码。我想如何添加多个和门。所以每次我点击“和”门按钮我都可以添加一个和门。就像塔防游戏一样,你可以在屏幕上添加多个塔。
也只是为了让你知道,如果这是一个愚蠢的问题,请耐心等待,因为我现在正在学习这一切。
他们的代码如下
public class CircuitDesigner extends Activity implements OnTouchListener, OnClickListener{
GameView Gameview;
float x, y;
boolean and = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Gameview = new GameView (this);
FrameLayout Game = new FrameLayout(this);
Gameview.setOnTouchListener(this);
x=0;
y=0;
LinearLayout GameWidgets = new LinearLayout (this);
Button AndGate = new Button(this);
TextView MyText = new TextView(this);
AndGate.setWidth(300);
AndGate.setText("AndGate");
MyText.setText("rIZ..i");
GameWidgets.addView(MyText);
GameWidgets.addView(AndGate);
Game.addView(Gameview);
Game.addView(GameWidgets);
setContentView(Game);
AndGate.setOnClickListener(this);
}
public void onClick(View v) {
Intent i = new Intent(this, Gates.class);
i.putExtra("circuit", "and");
startActivityForResult(i, 1);
// re-starts this activity from game-view. add this.finish(); to remove from stack
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(data.getExtras().containsKey("andInfo")){
and = true;
}
}
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
x = event.getX();
y = event.getY();
return true;
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Gameview.pause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Gameview.resume();
}
public class GameView extends SurfaceView implements Runnable {
SurfaceHolder ourHolder;
Thread ourThread = null;
boolean isRunning = false;
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
ourHolder = getHolder();
}
public void pause(){
isRunning = false;
while(true){
try {
ourThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
ourThread = null;
}
public void resume(){
isRunning = true;
ourThread = new Thread(this);
ourThread.start();
}
public void run() {
// TODO Auto-generated method stub
while (isRunning) {
if (!ourHolder.getSurface().isValid())
continue;
Canvas canvas = ourHolder.lockCanvas();
canvas.drawRGB(0, 0, 0);
if(x != 0 && y != 0 && and == true){
Bitmap test = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
canvas.drawBitmap(test, x-(test.getWidth()/2), y-(test.getHeight()/2), null);
}
ourHolder.unlockCanvasAndPost(canvas);
}
}
}
}
盖茨班是
public class Gates extends Activity implements OnClickListener{
Button bAnd;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.gates);
bAnd = (Button) findViewById(R.id.bAnd);
bAnd.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = getIntent();
String msg = i.getStringExtra("circuit");
switch (v.getId()) {
case R.id.bAnd:
i.putExtra("andInfo", "and");
setResult(RESULT_OK, i);
finish();
break;
default:
break;
}
}
}
答案 0 :(得分:0)
直接使用Drawables。如果你使用getResources()。getDrawable(int resid)得到一个drawable,系统不会每次都分配一个新的Bitmap。它将改为优化并重复使用相同的位图。