2015-05-21 2 views
0

Я создаю приложение Android для поворота изображения на 360 градусов. Когда я отслеживаю панель поиска, изображение должно вращаться.Как повернуть изображение на 360 градусов с помощью Seekbar в Android?

Не могли бы вы помочь мне в достижении этого?

Imageview selectedimage; 
final int width = selectedimage.width; 
final int height = selectedimage.height;  

final Bitmap scaledBitmap = Bitmap.createScaledBitmap(selectedimage,width, height, true); 
selectedimage.setImageBitmap(getRotatedBitmap(scaledBitmap)); 

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
    @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 
     } 

@Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 
     } 

@Override 
    public void onProgressChanged(SeekBar seekBar, int progress, 
          boolean fromUser) { 
      // TODO Auto-generated method stub 

      rotation += 90; 
      rotation %= 360; 
      Bitmap bitmap = getRotatedBitmap(scaledBitmap); 
      selectedImage.setImageBitmap(bitmap); 
    } 
    });  

private Bitmap getRotatedBitmap(Bitmap bitmap) { 
    if (rotation % 360 == 0) { 
     return bitmap; 
    } 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(rotation, bitmap.getWidth()/2, 
         bitmap.getHeight()/2); 

    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), 
         bitmap.getHeight()/2, matrix, true); 
} 

Я не знаю, как вычислить значение вращения и применить к панели поиска, когда трек вперед и в этом случае панели поиска, что изображение должно вращаться постепенно, и когда трек назад он должен вращаться постепенно обратное.

ответ

0

Вы можете попробовать это. Я использовал рисованное изображение и получаю растровое изображение.

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      int progress = 0; 

      @Override 
      public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) { 
       progress = progresValue; 

       Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
       Matrix mat = new Matrix(); 
       mat.postRotate(progresValue); 
       Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), mat, true); 
       imageView.setImageBitmap(bMapRotate); 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
       Toast.makeText(getApplicationContext(), "Started tracking seekbar", Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 

      } 
     }); 
+0

где применять поворот на 360 градусов? – kumar

0

Нет необходимости создания нового растрового изображения каждый раз. Используйте только матрицу вместо

float pivX=imageView.getDrawable().getBounds().width()/2; 
float pivY=imageView.getDrawable().getBounds().height()/2; 
Matrix matrix = new Matrix(); 
imageView.setScaleType(ScaleType.MATRIX); 
matrix.postRotate((float) angle, pivX, pivY); 
imageView.setImageMatrix(matrix); 

если APK уровень> = 11

imageView.setRotation(angle); 
+0

привет спасибо за ответ мне одно сомнение в этом matrix.postRotate ((float) angle, pivX, pivY); int this angle = 360 и pivx-height pviy -width это правильно? – kumar

+0

, где для применения значения прогресса – kumar

+0

добавлены значения pivX, pivY для кода. дайте угол, как хотите. –

0
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     int progress = 0; 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) { 
      mat.postRotate(progresValue, centerX, centerY); 
      imageView.setImageMatrix(mat); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      Toast.makeText(getApplicationContext(), "Started tracking seekbar", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 

Bitmap ВМАР = BitmapFactory.decodeResource (GetResources(), R.drawable.ic_launcher);

Matrix mat = new Matrix();

создать растровое изображение и матрицу. Вы должны избегать создания растрового изображения каждый раз. Вместо этого вы используете матрицу.

Смежные вопросы