如何在android中(在指尖旋转)顺时针和逆时针旋转图像?

如何在android中(在指尖旋转)顺时针和逆时针旋转图像?

问题描述:

我不得不在旋转屏幕上的指尖时旋转叠加图像,顺时针和逆时针旋转,不想旋转特定的天使。如果任何机构有解决方案,请帮助我。如何在android中(在指尖旋转)顺时针和逆时针旋转图像?

+1

什么是 “形象”?什么是“叠加”? – CommonsWare 2013-05-07 11:21:38

+0

你是指动画,还是旋转源图像本身? – kabuto178 2013-05-07 11:23:54

+0

你可以更多地解释一下,或者添加你已经拥有的代码段将有助于更多的 – Triode 2013-05-07 11:24:01

检查这个答案也许可以帮助你:How can i use RotateAnimation to rotate a circle?

+0

非常感谢Dude ...它工作得很好。但我需要旋转多个手指(大多数是两个)的触摸除了一个图像。它用1个手指工作正常,但当我用2个手指使用它的前一个位置改变了一个眨眼。那么你能帮我找到解决这个问题的方法吗?提前致谢。 – Tapesh 2013-05-07 13:59:50

试试下面的链接,并检查this链接之前也尝试: -

public void Rotate(View v) 
{ 

    ImageView img = (ImageView)findViewById(R.id.imageView01); 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.bharath); 
// Getting width & height of the given image. 
     int w = bmp.getWidth(); 
     int h = bmp.getHeight(); 
// Setting pre rotate to 90 
     Matrix mtx = new Matrix(); 
     mtx.preRotate(90); 
// Rotating Bitmap 
     Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true); 
     BitmapDrawable bmd = new BitmapDrawable(rotatedBMP); 
     img.setImageBitmap(rotatedBMP); 
    } 

试试这个

AndroidBitmap.java

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.Matrix; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.SeekBar; 
import android.widget.Spinner; 

public class AndroidBitmap extends Activity { 

    //private final String imageInSD = "/sdcard/er.PNG"; 

    ImageView myImageView; 
    Spinner spinnerScale; 
    SeekBar seekbarRotate; 

    private static final String[] strScale 
     = {"0.2x", "0.5x", "1.0x", "2.0x", "5.0x"}; 
    private static final Float[] floatScale 
     = {0.2F, 0.5F, 1F, 2F, 5F}; 
    private final int defaultSpinnerScaleSelection = 2; 

    private ArrayAdapter<String> adapterScale; 

    private float curScale = 1F; 
    private float curRotate = 0F; 

    Bitmap bitmap; 
    int bmpWidth, bmpHeight; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     myImageView = (ImageView)findViewById(R.id.imageview); 

     spinnerScale = (Spinner)findViewById(R.id.scale); 
     seekbarRotate = (SeekBar)findViewById(R.id.rotate); 

     adapterScale = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, strScale); 
     adapterScale.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinnerScale.setAdapter(adapterScale); 
     spinnerScale.setSelection(defaultSpinnerScaleSelection); 
     curScale = floatScale[defaultSpinnerScaleSelection]; 

     BitmapDrawable img = (BitmapDrawable) getResources() 
       .getDrawable(R.drawable.ic_launcher); 


     bitmap = img.getBitmap();//BitmapFactory.decodeFile(imageInSD); 
     bmpWidth = bitmap.getWidth(); 
     bmpHeight = bitmap.getHeight(); 

     drawMatrix(); 

     spinnerScale.setOnItemSelectedListener(spinnerScaleOnItemSelectedListener); 
     seekbarRotate.setOnSeekBarChangeListener(seekbarRotateSeekBarChangeListener); 

    } 

    private void drawMatrix(){ 

     Matrix matrix = new Matrix(); 
     matrix.postScale(curScale, curScale); 
     matrix.postRotate(curRotate); 

     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bmpWidth, bmpHeight, matrix, true); 
     myImageView.setImageBitmap(resizedBitmap); 

    } 

    private SeekBar.OnSeekBarChangeListener seekbarRotateSeekBarChangeListener 
     = new SeekBar.OnSeekBarChangeListener(){ 

      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, 
        boolean fromUser) { 
       // TODO Auto-generated method stub 
       curRotate = (float)progress; 
       drawMatrix(); 
      } 

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

      } 

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

      }}; 

    private Spinner.OnItemSelectedListener spinnerScaleOnItemSelectedListener 
     = new Spinner.OnItemSelectedListener(){ 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       curScale = floatScale[arg2]; 
       drawMatrix(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 
       spinnerScale.setSelection(defaultSpinnerScaleSelection); 
       curScale = floatScale[defaultSpinnerScaleSelection]; 
      }}; 
} 

布局文件

的main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello, Android image rotate" 
    /> 
<Spinner 
    android:id="@+id/scale" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
<SeekBar 
    android:id="@+id/rotate" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5px" 
    android:max="360" 
    android:progress="0" 
    /> 
<ImageView 
    android:id="@+id/imageview" 
    android:layout_gravity="center" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scaleType="center" 
    /> 
</LinearLayout> 

希望这有助于

+0

手指触摸嗯!你为什么没有说过。 [查看此链接](http://*.com/a/2939405/2345913)。在这里,你可以获得手指触摸位置的坐标,捕捉运动,然后使用上述逻辑,我希望这可以解决这个问题。 – CRUSADER 2013-05-07 12:18:39