вращение кнопки Android с ориентацией устройства - PullRequest
0 голосов
/ 19 января 2012

в моем приложении для Android, когда я поворачиваю / наклоняю свое устройство, я хочу повернуть кнопки управления в противоположном направлении, что компенсирует ориентацию устройства.вроде как идея ориентации экрана в андроиде

вот мой класс сенсора:

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

        }
    }

}

вместе с моей расширенной кнопкой:

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

}

}

как мне создать свойкнопка с расширенным классом кнопок?

вот моя кнопка:

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

в принципе, это то, чего я хочу достичь (псевдокод):

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

если возможно, пожалуйста, дайте полные фрагменты кода, я видел, что многие ответы почти отвечали на мой вопрос, но упускали основную часть того, как реализовать расширенную кнопку назад к моей кнопке в моем основном классе.

Ответы [ 3 ]

1 голос
/ 19 января 2012
    ImageButton button= (ImageButton) findViewById(R.id.test_image);
    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
    Matrix mat = new Matrix();
    mat.postRotate(deg);
    Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), mat, true);
    button.setImageBitmap(bMapRotate);
0 голосов
/ 27 ноября 2014

Вы можете использовать button.animate (). Вращение (градус);

0 голосов
/ 20 января 2012

для дальнейшего использования, следуйте руководству по android dev о пользовательских компонентах;

в моем случае, я забыл добавить макет xml

, процедура идет так ->

  1. Создайте класс для компонента, затем переопределите детали, которые я хочу изменить

    в этом случае:

    void setValue(double deg) {//this changes the rotation of canvas....
        degree = deg;
    }
    
  2. добавить xml для пользовательского класса

  3. найти представление в моей деятельности и внести изменения

done

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...