Pregunta

En mi aplicación de Android, cuando giro/inclino mi dispositivo, quiero rotar mis controles de botón en la dirección opuesta, lo que compensa la orientación del dispositivo. como la idea de la orientación de la pantalla en Android

Aquí está mi clase de sensor:

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    synchronized (this) {
        double alpha = 0.8;
        double gravity[] = new double[3];
        switch (event.sensor.getType()){
            case Sensor.TYPE_ACCELEROMETER:
                // alpha is calculated as t / (t + dT)
                // with t, the low-pass filter's time-constant
                // and dT, the event delivery rate                                  
                //gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
                //gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
                //gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

                //sensorX = event.values[0] - gravity[0];
                //sensorY = event.values[1] - gravity[1];
                //sensorZ = event.values[2] - gravity[2];
                    //ignore this section!
            break;
        case Sensor.TYPE_ORIENTATION:   
                sensorZ = event.values[0];
                sensorX = event.values[1];
                sensorY = event.values[2];
                outputZ.setText("Z:"+Float.toString(event.values[0]));
                outputX.setText("X:"+Float.toString(event.values[1]));
                outputY.setText("Y:"+Float.toString(event.values[2]));
                //Toast.makeText(getApplicationContext(), "SWITCH TO ",Toast.LENGTH_LONG).show();
                //RelativeLayout s_r_t = (RelativeLayout) findViewById(R.id.snap_r_t);
                //RotateView r_flash = new RotateView(this , s_r_t.getWidth(), s_r_t.getHeight(), 90)(RotateView) findViewById(R.id.flash);
                //RotateView r_flash = new RotateView(this , s_r_t.getWidth(), s_r_t.getHeight(), 90);
                s_r_t.addView(r_flash);
                //s_r_t.setLayoutParams(params)
                //flash.getWidth();
                //flash.getHeight();

        break;

        }
    }

}

Junto con mi botón extendido:

 public class RotateView extends Button {

private float cx,cy;
private double degree;
private Button button;

public RotateView(Context context , int x, int y, double deg) {
    super(context);     
    cx = (float)x/2;
    cy = (float)y/2;
    degree = deg;
}

public RotateView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onDraw(Canvas canvas) {
     canvas.save();
     canvas.rotate((float)degree,cx,cy);
     super.onDraw(canvas);
     canvas.restore();

}

}

¿Cómo creo mi botón con la clase de botón extendido?

Aquí está mi botón:

 flash = (Button)findViewById(R.id.flash);

Básicamente, esto es lo que quiero lograr (pseudo código):

new button = find my button id;
onSensorChanged{
 set button rotation to sensor.getdata degrees;
}

Si es posible, entregue segmentos completos del código, he visto muchas respuestas casi respondí a mi pregunta, pero perdiendo la parte esencial de cómo implementar el botón extendido de regreso a mi botón en mi clase principal.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top