Android: canvas.drawBitmap with Orientation(MagnetField)Sensor
Posted
by user368374
on Stack Overflow
See other posts from Stack Overflow
or by user368374
Published on 2010-06-16T15:11:22Z
Indexed on
2010/06/16
17:52 UTC
Read the original article
Hit count: 813
android
hallo, i am developing Android app with orientation sensor. now i got problem. What i want to do is, change scale and position of bitmap which read from sd card. The scale and position depend on value from orientation sensor. i use canvas.drawBitmap(), then it cause problem. the app is just shut down. other drawXXX()methods have no problem..any suggestion?
public class AnMagImgtestActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager; private MySurfaceView view;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); view = new MySurfaceView(this);
///make it fullscreen
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
///give screen a hiropon
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(view); }
@Override protected void onResume() { super.onResume();
List sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION); if (sensors.size() > 0) { Sensor sensor = sensors.get(0); sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME); } }
@Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); }
@Override public void onAccuracyChanged(Sensor sensor, int accuracy) { }
@Override public void onSensorChanged(SensorEvent event) { view.onValueChanged(event.values); }
class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{ public MySurfaceView(Context context) { super(context); getHolder().addCallback(this);
}
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { onValueChanged(new float[3]); }
@Override public void surfaceCreated(SurfaceHolder holder) { }
@Override public void surfaceDestroyed(SurfaceHolder holder) { }
void onValueChanged(float[] values) { Canvas canvas = getHolder().lockCanvas();
//String imgfn = "/sdcard/seekcamera"+"/"+regcode+"/to"+"/"+tempnum+".jpg"; String imgfn = "/sdcard/seekcamera"+"/de"+"/to"+"1.jpg"; //String imgfn = "/sdcard/seekcamera"+"/00"+"/00"+"/"+"42.jpg"; File mf = new File(imgfn); Bitmap bitmap0 = BitmapFactory.decodeFile(mf.getPath());
if (canvas != null) { Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.GREEN); paint.setTextSize(12);
canvas.drawColor(Color.BLACK);
paint.setAlpha(200);
for (int i = 0; i < values.length; i++) {
canvas.drawText("values[" + i + "]: " + values[i], 0, paint.getTextSize() * (i + 1), paint);
}
paint.setColor(Color.WHITE);
paint.setTextSize(100+values[2]);
paint.setAlpha( (int) (255-values[2]));
canvas.drawText("Germany", values[0]*1+20, paint.getTextSize() * 1+values[2]-80, paint);
///here is the problem..
canvas.drawBitmap(bitmap0, values[0],values[1], paint);
getHolder().unlockCanvasAndPost(canvas);
} } } }
© Stack Overflow or respective owner