2013-12-17 4 views
0

Я пытаюсь создать приложение для схем. Основной экран в основном там, где схемы будут разработаны с использованием нескольких компонентов. Чтобы выбрать компоненты, есть кнопка, которая приведет пользователя к следующему действию. В этом упражнении отображаются все компоненты, которые вы можете выбрать. Поэтому у меня есть два класса активности и один класс Surface View. Основной класс активности называется CircuitDesigner, и он установлен в contentview для класса viewview, называемого GameView. Второй класс активности называется Гейтс.Android: добавление нескольких экземпляров одного и того же изображения

Так, например, из класса gates, если я выбираю компонент «А», я вернусь к основному действию, и я смогу разместить туда ворота. Хотя это работает с использованием следующего кода. Я хочу, как добавить несколько и ворота. Поэтому каждый раз, когда я нажимаю кнопку «и», я могу добавить один и затвора. Также как игра обороны башни, где вы можете добавить несколько башен на экран.

Также, чтобы сообщить вам, если это глупый вопрос, хорошо несите меня, поскольку я просто изучаю все это в данный момент.

Их код выглядит следующим образом

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); 
    } 

} 


} 
} 

И Gates Класс

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

Просто непосредственно использовать вводимый коэффициент. если вы получите drawable с getResources(). getDrawable (int resid) система не будет выделять новый Bitmap каждый раз. Вместо этого он оптимизирует его и повторно использует всегда одно и то же растровое изображение.

Смежные вопросы