Android:使用SeekBar更改球的速度

时间:2012-01-25 14:01:35

标签: android function android-widget seekbar

我写了一个应用程序,基本上在屏幕上显示一个弹跳球。我想添加一个SeekBar,当我改变它的值时,它会增加球的速度。我在Ball类中创建了函数来获取和设置x和y的速度。

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()?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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();
}