2013-07-09 19 views
3

Я начинаю программировать в андроиде. Я хочу написать программу, которая должна изменить положение круга с помощью датчика акселерометра. мой код находится внизу, положение круга было изменено, но круг не переместился вправо или вниз по экрану, кружок немного сдвинулся :(даже если я переместил слишком много мобильного телефона. Мой вопрос: как я могу двигаться шар (круг) ниже или справа от экрана с акселерометром?Как я могу перемещать круг с помощью датчика акселерометра?

public class MainActivity extends Activity implements SensorEventListener{ 

ShapeDrawable shapeDrawable=new ShapeDrawable(); 
public static int x; 
public static int y; 
public static Object bimtap; 
Bitmap bitmap; 

private SensorManager sm; 

CustomDrawableView cDraw; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    sm=(SensorManager)getSystemService(SENSOR_SERVICE); 
    cDraw=new CustomDrawableView(this); 
    setContentView(cDraw); 
} 

public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // TODO Auto-generated method stub 

} 

public void onSensorChanged(SensorEvent event) { 
    // TODO Auto-generated method stub 
    if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ 
     // 
     x=(int)Math.pow(event.values[0], 2); 
     y=(int)Math.pow(event.values[1], 2); 
    } 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
    sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
} 

@Override 
public void onStop(){ 
    sm.unregisterListener(this); 
    super.onStop(); 
} 

public class CustomDrawableView extends View{ 

    int width=150; 
    int height=150; 

    public CustomDrawableView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
     shapeDrawable=new ShapeDrawable(); 
    } 

    public void onDraw(Canvas canvas){ 
     Paint paint=new Paint(); 
     paint.setColor(Color.BLUE); 
     canvas.drawCircle(MainActivity.x+50, MainActivity.y+50, 25, paint); 
     invalidate(); 

    } 

} 
} 

Спасибо за помощь :) отношении

ответ

0

После кода переместите круг, где когда-либо вы щелкаете

public class Custom_View extends View { 
private PointF point; 
private Paint paint; 

public Custom_View(Context context) { 
    this(context, null); 
} 

public Custom_View(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    if (point != null) { 
     int radius = 50; 
      paint.setColor(Color.GREEN); 
      canvas.drawCircle(point.x, point.y, radius, paint); 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     point = new PointF(event.getX(), event.getY()); 
     break; 
    case MotionEvent.ACTION_UP: 
     point = null; 
     break; 
    case MotionEvent.ACTION_MOVE: 
     point = new PointF(event.getX(), event.getY()); 
     break; 
    } 
    invalidate(); 
    return true; 
} 
+0

Спасибо , но я хочу, кружок перемещался во всем экране со значением акселерометра, а не с моим щелчком на экране. – Sensors

+0

Даже не близко, чтобы ответить на вопрос. – async

+0

@ user16547 то как он принимает ответ? Вы знаете? то ответьте на него, не ставьте downvotes. Я упомянул в своей первой строке ответа. – Aravin

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