如何在anroid studio java中将位图旋转到ontouchevent

b91juud3  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(259)

我试图将我的“播放器”旋转到我在手机上触摸的位置,但似乎不起作用。例子

下面是我如何尝试的:

  1. public static Bitmap RotateBitmap(Bitmap source, float angle)
  2. {
  3. Matrix matrix = new Matrix();
  4. matrix.postRotate(angle);
  5. return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
  6. }
  7. @Override
  8. public boolean onTouchEvent(MotionEvent event) {
  9. int x = (int)event.getX();
  10. int y = (int)event.getY();
  11. int dx = (int)player.x - x;
  12. if(dx<0)
  13. dx*=-1;
  14. int dy = (int)player.y - y;
  15. if(dy<0)
  16. dy*=-1;
  17. double df = dy/dx;
  18. switch (event.getAction()){
  19. case MotionEvent.ACTION_DOWN:
  20. if (joystick.isPressed((double) event.getX(),(double) event.getY())){
  21. joystick.setIsPressed(true);
  22. }
  23. RotateBitmap(player.getMovement(),(float) Math.toDegrees(Math.asin(df)));
  24. return true;
  25. case MotionEvent.ACTION_MOVE:
  26. if (joystick.getIsPressed()){
  27. joystick.setActuator((double) event.getX(),(double) event.getY());
  28. }
  29. return true;
  30. case MotionEvent.ACTION_UP:
  31. joystick.setIsPressed(false);
  32. joystick.resetActuator();
  33. return true;
  34. }
  35. return super.onTouchEvent(event);
  36. }

这是我的全部代码:

  1. package com.example.myapplication;
  2. import android.content.Context;
  3. import android.graphics.Bitmap;
  4. import android.graphics.Canvas;
  5. import android.graphics.Matrix;
  6. import android.graphics.Paint;
  7. import android.view.MotionEvent;
  8. import android.view.SurfaceView;
  9. public class GameView extends SurfaceView implements Runnable {
  10. public static final double MAX_UPS = 30.0;
  11. private final Joystick joystick = new Joystick(275,700,70,40);;
  12. private Thread thread;
  13. private boolean isPlaying;
  14. private int screenX, screenY;
  15. public static float screenRatioX,screenRatioY;
  16. private Paint paint;
  17. private final Movement player;
  18. //private Movement movement;
  19. private Background background1, background2;
  20. public GameView(Context context, int screenX, int screenY) {
  21. super(context);
  22. this.screenX=screenX;
  23. this.screenY=screenY;
  24. screenRatioX=1920f/screenX;
  25. screenRatioY=1080f/screenY;
  26. background1 = new Background(screenX,screenY,getResources());
  27. background2 = new Background(screenX,screenY,getResources());
  28. player = new Movement(screenY,getResources(),getContext(),2*500,500,30);
  29. background2.x=screenX;
  30. paint = new Paint();
  31. }
  32. @Override
  33. public void run() {
  34. while (isPlaying){
  35. update();
  36. draw();
  37. sleep();
  38. }
  39. }
  40. private void update(){
  41. background1.x-=10*screenRatioX;
  42. background2.x-=10*screenRatioX;
  43. if (background1.x + background1.backgorund.getWidth()<0){
  44. background1.x = screenX;
  45. }
  46. if (background2.x + background2.backgorund.getWidth()<0){
  47. background2.x = screenX;
  48. }
  49. joystick.update();
  50. player.update(joystick);
  51. }
  52. private void draw(){
  53. if (getHolder().getSurface().isValid()){
  54. Canvas canvas = getHolder().lockCanvas();
  55. canvas.drawBitmap(background1.backgorund,background1.x,background1.y,paint);
  56. canvas.drawBitmap(background2.backgorund,background2.x,background2.y,paint);
  57. canvas.drawBitmap(player.getMovement(),(int)player.x,(int)player.y,paint);
  58. joystick.draw(canvas);
  59. getHolder().unlockCanvasAndPost(canvas );
  60. }
  61. }
  62. private void sleep(){
  63. try {
  64. Thread.sleep(17);
  65. } catch (InterruptedException e) {
  66. e.printStackTrace();
  67. }
  68. }
  69. public void resume() {
  70. isPlaying = true;
  71. thread = new Thread(this);
  72. thread.start();
  73. }
  74. public void pause(){
  75. try{
  76. isPlaying = false;
  77. thread.join();
  78. } catch (InterruptedException e){
  79. e.printStackTrace();
  80. }
  81. }
  82. public static Bitmap RotateBitmap(Bitmap source, float angle)
  83. {
  84. Matrix matrix = new Matrix();
  85. matrix.postRotate(angle);
  86. return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
  87. }
  88. @Override
  89. public boolean onTouchEvent(MotionEvent event) {
  90. int x = (int)event.getX();
  91. int y = (int)event.getY();
  92. int dx = (int)player.x - x;
  93. if(dx<0)
  94. dx*=-1;
  95. int dy = (int)player.y - y;
  96. if(dy<0)
  97. dy*=-1;
  98. double df = dy/dx;
  99. switch (event.getAction()){
  100. case MotionEvent.ACTION_DOWN:
  101. if (joystick.isPressed((double) event.getX(),(double) event.getY())){
  102. joystick.setIsPressed(true);
  103. }
  104. RotateBitmap(player.getMovement(),(float) Math.toDegrees(Math.asin(df)));
  105. return true;
  106. case MotionEvent.ACTION_MOVE:
  107. if (joystick.getIsPressed()){
  108. joystick.setActuator((double) event.getX(),(double) event.getY());
  109. }
  110. return true;
  111. case MotionEvent.ACTION_UP:
  112. joystick.setIsPressed(false);
  113. joystick.resetActuator();
  114. return true;
  115. }
  116. return super.onTouchEvent(event);
  117. }
  118. }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题