2014-01-13 4 views
0

Я делаю анимацию маятника, которая имеет изображение, которое должно двигаться по оси х, когда телефон наклонен до определенной степени и возвращается в исходное состояние, когда телефон держится прямо.Анимация контролируется движением телефона android

Вот что я сделал: -

Main.Java

public class MainActivity extends Activity implements SensorEventListener 
    { 

     protected void onCreate(Bundle savedInstanceState) 
      { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       imgPend= (ImageView)findViewById(R.id.imgBell); 

       sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE); 
       lastUpdate = System.currentTimeMillis(); 


       rAnimation= new RotateAnimation(0.0f, 30.0f, 
         Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 
         0.5f); 

       rAnimation.setFillAfter(true); 
     } 
@Override 
    public void onSensorChanged(SensorEvent event) 
    { 
     // TODO Auto-generated method stub 
     if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 
      getAccelerometer(event); 
    } 






    private void getAccelerometer(SensorEvent event) 
    { 
     // TODO Auto-generated method stub 
     float[] values = event.values; 

     float x = values[0]; 
     float y = values[1]; 
    // float z = values[2]; 

      float accelationSquareRoot = (x * x + y * y)//+ z * z) 
        /(SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH); 
       long actualTime = System.currentTimeMillis(); 
       if (accelationSquareRoot >= 2) // 
       { 
        if (actualTime - lastUpdate < 200) 
        { 
        return; 
        } 
        lastUpdate = actualTime; 
        rAnimation= new RotateAnimation(0.0f, 30.0f, 
          Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 
          0.5f); 

        rAnimation.setFillAfter(true); 
        rAnimation.setRepeatMode(rAnimation.REVERSE); 


        imgPend.startAnimation(rAnimation); 

       }   
    } 

Вопрос заключается в том, что анимация не очень гладко, и происходит только тогда, когда я встряхните телефон. Я хочу, чтобы он был гладким, только наклон и назад.

ответ

1

Я думаю, вы должны попробовать

rAnimation.setRepeatCount(rAnimation.RESTART); 
+0

Спасибо, что он работал, чтобы получить изображение в исходном месте – user3146095

0

если (ActualTime - lastUpdate < 200)

Здесь вы существенно позволяет 5fps. Уменьшите это до 50 мс или около того, чтобы получить более плавную анимацию.

+0

Спасибо за ваш ответ, но я не понял, что ты имел в виду. Можете ли вы объяснить немного – user3146095

+0

, также изображение остается в повернутом положении и не возвращается к его первоначальному явлению. – user3146095

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