Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid Accelerometer moving ball
    text
    copied!<p>i have done developed a sample application with the help of tutorials posted on web. my aim is to access the accelerometer and move a ball as per the phone orientation. i was successful to certail extent. But i have two isses</p> <ol> <li>the ball is going out of bound of the screen</li> <li>the ball movement is not smooth ( looks it disappears and re appears on the screen)</li> </ol> <p>here is my code. is there any change i need to do to get the smooth and exact movement of the ball as we see in lot of games.</p> <pre><code>public class Accelerometer extends Activity implements SensorEventListener{ /** Called when the activity is first created. */ CustomDrawableView mCustomDrawableView = null; ShapeDrawable mDrawable = new ShapeDrawable(); public static int x; public static int y; private Bitmap mBitmap; private Bitmap mWood; private SensorManager sensorManager = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get a reference to a SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); mCustomDrawableView = new CustomDrawableView(this); setContentView(mCustomDrawableView); // setContentView(R.layout.main); } // This method will update the UI on new sensor events public void onSensorChanged(SensorEvent sensorEvent) { { /* if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { // the values you were calculating originally here were over 10000! x = (int) Math.pow(sensorEvent.values[0], 2); y = (int) Math.pow(sensorEvent.values[1], 2); }*/ if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) { Display display = getWindowManager().getDefaultDisplay(); int xmax = display.getWidth(); int ymax = display.getHeight(); x = (int) Math.pow(sensorEvent.values[1], 2); y = (int) Math.pow(sensorEvent.values[2], 2); if (x &gt; xmax) { x = xmax; } else if (x &lt; -xmax) { x = -xmax; } if (y &gt; ymax) { y = ymax; } else if (y &lt; -ymax) { y = -ymax; } } } } // I've chosen to not implement this method public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub } @Override protected void onResume() { super.onResume(); // Register this class as a listener for the accelerometer sensor sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME); // ...and the orientation sensor sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onStop() { // Unregister the listener sensorManager.unregisterListener(this); super.onStop(); } public class CustomDrawableView extends View { public CustomDrawableView(Context context) { super(context); Bitmap ball = BitmapFactory.decodeResource(getResources(), R.drawable.ball); final int dstWidth = 50; final int dstHeight = 50; mBitmap = Bitmap.createScaledBitmap(ball, dstWidth, dstHeight, true); mWood = BitmapFactory.decodeResource(getResources(), R.drawable.wood); } protected void onDraw(Canvas canvas) { final Bitmap bitmap = mBitmap; canvas.drawBitmap(mWood, 0, 0, null); canvas.drawBitmap(bitmap, x, y, null); invalidate(); } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload