2011-01-04 12 views
0

私はアンドロイドプロジェクトで、ピボットポイントを修正するためにタッチで画像を回転させたいと思っています。私はこれらのことをすべて完了しましたが、私は1つの問題に直面しています:イメージを回転しようとしている間、イメージビットマップのサイズが変更されています。私はなぜそれが発生するか考えていない。もし誰かが私にこの問題を克服するためのアイデアを与えてくれたら。アンドロイドで画像を回転しながら画像のサイズを変更する

私のコード:

package com.demo.rotation; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Matrix; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.ImageView; 
import android.widget.ImageView.ScaleType; 

public class temp extends Activity{ 

ImageView img1; 
float startX; 
float startX2 ; 

Bitmap source; 
Bitmap bitmap1 = null; 

double r; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    img1 = (ImageView) findViewById(R.id.img1); 
    img1.setOnTouchListener(img1TouchListener); 

    bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.orsl_circle_transparent); 
} 

private OnTouchListener img1TouchListener = new OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_MOVE: 
       Log.d("MOVE", "1"); 
       if(source!=null) 
       r = Math.atan2(event.getX() - source.getWidth(), 
         (source.getHeight()/2) - event.getY()); 

       Log.i("startX" + event.getX(), "startY" + event.getY()); 
        rotate(r,bitmap1, img1); 
        img1.setScaleType(ScaleType.CENTER); 

       break; 

      case MotionEvent.ACTION_DOWN: 

       break; 

      case MotionEvent.ACTION_UP: 
       break; 

      default : 
       break; 
     } 
     return true; 
    } 
}; 

private void rotate(double r , Bitmap currentBitmap ,ImageView imageView) 
{ 
    int rotation = (int) Math.toDegrees(r); 
    Matrix matrix = new Matrix(); 

    matrix.setRotate(rotation, currentBitmap.getWidth()/2, currentBitmap.getHeight()/2); 
    source = Bitmap.createBitmap(currentBitmap, 0, 0, currentBitmap.getWidth(), currentBitmap.getHeight(), matrix, false); 
    imageView.setImageBitmap(source); 
    Log.i("HIGHT OF CURRENT BITMAP", ""+source.getHeight()); 
} 

} 

答えて

1

イメージを回転させず、キャンバスを回転させます。スケーリングはsetBounds()を使用して行われます。少しの手助けについては、this questionを参照してください。

0

あなたは長方形のビットマップを回転しています。そうする際には、キャンバスのサイズをフルイメージに合わせて変更する必要があります。あなたは望む機能を得るために、回転の後に手作業で切り取る必要があります。

0

問題は、ImageViewにビットマップを適用することと関係があります。まずBitmapDrawableを作成し、適用します。あなたがしなければ発生するいくつかのスケーリングの問題があります。なぜ、誰かが洞察力を提供するかもしれないかもしれない。コンパスアプリを作成するときに同じ問題が発生し、検索時にこのスレッドに来たので、修正された問題を修正すると思いました。

int rotation = (int) Math.toDegrees(r); 
Matrix matrix = new Matrix(); 
matrix.postRotate(rotation); 

source = Bitmap.createBitmap(currentBitmap, 0, 0, currentBitmap.getWidth(), currentBitmap.getHeight(), matrix, false); 
*BitmapDrawable newBmd = new BitmapDrawable(source); 

imageView.setImageDrawable(newBmd);* 
imageView.setScaleType(ScaleType.CENTER); 
関連する問題