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

Filed under:

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

Related posts about android