I have been trying for the life of me to make an Etch a sketch style game. The problem I am having is getting the drawPoint to continually draw instead of just moving the point around. I ended up putting each point into an array, but it slows down after a while, because it is redrawing every dot every time. Anyone have a solution?
Here is my complete code:
package com.DoodleDots.particularidiom;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
public class DoodleDots extends Activity {
private SensorManager mSensorManager;
private DDView mDDView;
private int x = 160;
private int y = 200;
private int x2 = 0;
private int y2 = 0;
private int x3 = 0;
private int y3 = 0;
private int c = 0;
private int r = 0;
private int[] oldXs = new int[10000];
private int[] oldYs = new int[10000];
private class DDView extends View implements SensorListener {
private Paint mPaint = new Paint();
private float mOrientationValues[] = new float[3];
public DDView(Context context) {
super(context);
mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
}
@Override
protected void onDraw(Canvas canvas) {
mPaint.setColor(0xFF000000);
synchronized (this) {
float[] values = mOrientationValues;
x3 = (int) values[2];
y3 = (int) values[1];
if(x2 < x3 && (x3 - x2) > 15 && x != 299) {
x++;
}
else if(x2 > x3 && (x3 - x2) < -15 && x != 22) {
x--;
}
if(y2 < y3 && (y3 - y2) > 15 && y != 22) {
y--;
}
else if(y2 > y3 && (y3 - y2) < -15 && y != 409) {
y++;
}
mPaint.setColor(0xC2C20000);
canvas.drawRect(0, 0, 20, 480, mPaint);
canvas.drawRect(20, 410, 300, 440, mPaint);
canvas.drawRect(300, 0, 320, 440, mPaint);
canvas.drawRect(20, 0, 300, 20, mPaint);
oldXs[c] = x;
oldYs[r] = y;
mPaint.setColor(0xFF000000);
mPaint.setStrokeWidth(3);
for(int i = 0; i < c; i++)
{
canvas.drawPoint(oldXs[i], oldYs[i], mPaint);
}
}
invalidate();
r++;
c++;
}
public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
if (sensor == SensorManager.SENSOR_ORIENTATION) {
for (int i=0 ; i<3 ; i++) {
mOrientationValues[i] = values[i];
}
}
}
}
public void onAccuracyChanged(int arg0, int arg1) {
// TODO Auto-generated method stub
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mDDView = new DDView(this);
main.addView(mDDView);
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mDDView,
SensorManager.SENSOR_ACCELEROMETER |
SensorManager.SENSOR_MAGNETIC_FIELD |
SensorManager.SENSOR_ORIENTATION,
SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onStop() {
mSensorManager.unregisterListener(mDDView);
super.onStop();
}
}




