android - 我怎样才能用加速度计传感器移动一个圆圈?

标签 android accelerometer

我是 android 编程的初学者。我想编写一个程序,用加速度计传感器改变圆的位置。我的代码在下面,圆圈的位置改变了,但圆圈没有移动到屏幕的右侧或下方,圆圈移动了一点:(即使我移动手机太多了。 我的问题:如何使用加速度计传感器将球(圆)移动到屏幕下方或右侧?

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();

    }

}
}

感谢您的帮助:) 尊重

最佳答案

下面的代码是在你点击的地方移动圆圈

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;
}

关于android - 我怎样才能用加速度计传感器移动一个圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553085/

相关文章:

swift - 加速度计输入滞后

iphone - 如何获得iphone加速度计的采样率频率?

java - 正则表达式帮助 : Excluding characters

android - 2019 年 4 月 6 日之后从 Location.getTime 返回的错误日期(周数翻转)

java - 输入的值为空:流输出文件夹为空

java - 如何使用Android的加速度计

android - 如何使用 Android 加速度计检测步行

android - 使用重力来确定世界引用系?

android - 无法加载类 'org.gradle.internal.logging.LoggingManagerInternal'。此意外错误的可能原因

php - 为什么 $_SERVER ["HTTP_REFERER"] 在 Android Webview 中不起作用?