Rotación del botón Android con orientación del dispositivo
-
30-10-2019 - |
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