2012-01-25 87 views
0

我已經寫了一個應用程序,基本上在屏幕上顯示一個彈跳球。我想添加一個SeekBar,當我改變它的值時增加球的速度。我在我的Ball類中創建函數來獲取和設置x和y速度。Android:使用SeekBar改變球的速度

package perseus.gfx.test; 
import everything; 
public class GfxActivity extends Activity implements OnSeekBarChangeListener { 

ViewGroup.LayoutParams vg = new ViewGroup.LayoutParams(-1, -1); 
double velx, vely; 
double x, y; 
double finx, finy; 
SeekBar velo; 
TextView tv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);      
    Ball ball = new Ball(this); 
    setContentView(R.layout.main); 
    addContentView(ball, vg);   
    tv = (TextView)findViewById(R.id.test); 
    velo = (SeekBar)findViewById(R.id.vel); 
    velo.setOnSeekBarChangeListener(this); 


    x = ball.getSpeedX(); 
    y = ball.getSpeedY(); 
    ball.setSpeedX(finx); 
    ball.setSpeedY(finy); 
} 
@Override 
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {  


    finx = x + arg1; 
    finy = y +arg1; 
} 
@Override 
public void onStartTrackingTouch(SeekBar arg0) { 
    //nothing 
} 
@Override 
public void onStopTrackingTouch(SeekBar arg0) { 
    //nothing 
} 
} 

的問題是,(我認爲),只FIN1和FIN2的局部值受到影響,所以球根本不會移動。 如何將fin1和fin2的值傳遞給onCreate()?

回答

0

你並不需要將它們傳回的onCreate(不是真的有可能,無論如何),你應該只需要在onProgresschanged結束()

@Override 
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {  

    finx = x + arg1; 
    finy = y +arg1; 

    ball.setSpeedX(finx); 
    ball.setSpeedY(finy); 
} 
+0

再次感謝設定球的速度:)我意識到我的錯誤,我已經在onCreate中實例化了球。我把球移到外面,現在工作正常。 –

0
@Override 
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {  

    finx = x + arg1; 
    finy = y +arg1; 

    ball.setSpeedX(finx); 
    ball.setSpeedY(finy); 
    ball.invalidate(); 
} 
+0

謝謝,我意識到我的錯誤,我已經在onCreate中實例化了球,移動到了外面,現在它工作。 ball.invalidate()是不必要的我想,我把它放在我的Ball類中。 –