2012-06-02 5 views
0

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

public class CustomDrawableView extends View { 

    AnimationSteeringActivity sens = new AnimationSteeringActivity(); 

    public CustomDrawableView(Context context) { 
     // TODO Auto-generated constructor stub 

     super(context); 

    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
       R.drawable.steering); 

     int canvasWidth = canvas.getWidth(); 
     int canvasHeight = canvas.getHeight(); 
     int bitmapWidth = bmp.getWidth(); 
     int bitmapHeight = bmp.getHeight(); 

     int centreX = (canvasWidth - bitmapWidth)/2; 

     int centreY = (canvasWidth - bitmapHeight)/2; 

     canvas.drawColor(Color.WHITE); 


     canvas.drawBitmap(bmp, centreX, centreY, null); 

и

public class AnimationSteeringActivity extends Activity implements 
    SensorEventListener { 
/** Called when the activity is first created. */ 

/** Called when the activity is first created. */ 
CustomDrawableView mCustomDrawableView = null; 
ShapeDrawable mDrawable = new ShapeDrawable(); 
public static int x; 
public static int y; 

private SensorManager sensorManager = null; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    // Get a reference to a SensorManager 
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    mCustomDrawableView = new CustomDrawableView(this); 
    setContentView(mCustomDrawableView); 
    // setContentView(R.layout.main); 

} 

// This method will update the UI on new sensor events 
public void onSensorChanged(SensorEvent sensorEvent) { 
    { 
     if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
      // the values you were calculating originally here were over 
      // 10000! 
      x = (int) Math.pow(sensorEvent.values[1], 2); 
      y = (int) Math.pow(sensorEvent.values[2], 2); 

     } 

     if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) { 

     } 
    } 
} 

ответ

2

Ищут делать на самом деле вращение по этой ссылке

rotating a bitmap

так в onSensorChanged методе там вы будете чередовать с пожелавшими х или у значения в зависимости от что вы хотите

+0

Я знаю, как это сделать с матрицей, но я не знаю, как передать x и y из класса датчика – user1422066

+0

получить правильное значение из onsensorchanged и поместить его в matrix.postRotate (-90); // против часовой стрелки на 90, где указано 90 – QVDev

+0

, как поместить значение датчика в другой класс с матрицей i can not, пожалуйста, посмотрите мой код. – user1422066

0
Bitmap myBitmap = BitmapFactory.decodeStream(downloadImageFromWeb()); 

Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.android1); 

Display d = getWindowManager().getDefaultDisplay(); 

int x = d.getWidth(); 

int y = d.getHeight(); 

ImageView img1 = (ImageView)findViewById(R.id.img1); 

Bitmap scaledBitmap = Bitmap.createScaledBitmap(myBitmap, y, x, true); 

Matrix matrix = new Matrix(); 

matrix.postRotate(-90); 

Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap .getWidth(), scaledBitmap .getHeight(), matrix, true); 


img1.setImageBitmap(rotatedBitmap); 
Смежные вопросы