Android:添加同一图像的多个实例

时间:2013-12-17 10:24:16

标签: java android

我正在尝试为电路构建应用程序。主屏幕基本上是使用多个组件设计电路的地方。要选择组件,可以使用一个按钮将用户带到下一个活动。此活动显示您可以选择的所有组件。所以我有两个活动类和一个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;
    }


}
}

1 个答案:

答案 0 :(得分:0)

直接使用Drawables。如果你使用getResources()。getDrawable(int resid)得到一个drawable,系统不会每次都分配一个新的Bitmap。它将改为优化并重复使用相同的位图。