2010-12-27 21 views
1

私はこの問題の解決策を探していましたが、何の助けもありませんでした。 私の問題は私のイメージは回転していますが、ビットマップサイズは回転中に変化しません。ここアンドロイドのタッチで固定ポイントで画像を回転させる方法

は私のコード

package dharam.rotate; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Matrix; 
import android.os.Bundle; 
import android.provider.ContactsContract.CommonDataKinds.Event; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.Window; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class Rotate extends Activity { 
    View baseView ; 
    ImageView turntable; 
    TextView bottomText; 
    GestureDetector gestureDetector; 
    private float x , y; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 

    baseView = (View) findViewById(R.id.baseView); 
    turntable = (ImageView) findViewById(R.id.turntable); 

    turntable.setOnTouchListener(onTableTouched); 
    baseView.setOnTouchListener(onTableTouched); 
} 

public android.view.View.OnTouchListener onTableTouched = new android.view.View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent evt) { 
     double r = Math.atan2(evt.getX() - turntable.getWidth()/2, 
       (turntable.getHeight()/2) - evt.getY()); 
     int rotation = (int) Math.toDegrees(r); 
     Log.i("R is ", ""+r); 
     if (evt.getAction() == MotionEvent.ACTION_DOWN) { 
     } 

     if (evt.getAction() == MotionEvent.ACTION_MOVE) { 
      x= evt.getX(); 
      y= evt.getY(); 
      updateRotation(rotation); 
     } 

     if (evt.getAction() == MotionEvent.ACTION_UP) { 
       // 
     } 
     return true; 
    } 
}; 
private void updateRotation(double rot) { 
    float newRot = new Float(rot); 
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.orsl_circle_transparent); 
    Matrix matrix = new Matrix(); 
//  matrix.setTranslate(getWindowManager().getDefaultDisplay().getWidth()/2, getWindowManager().getDefaultDisplay().getHeight()); 
     matrix.postRotate(newRot,bitmap.getWidth()/2,bitmap.getHeight()/2); 
//  matrix.setSinCos(newRot, newRot/2, 100, 100); 
//  matrix.postRotate(newRot); 
     Log.i("THE ROATTION ", " "+ newRot); 

    if(y>250) 
    { 
     Bitmap redrawnBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap 
       .getWidth(), bitmap.getHeight(), matrix, true); 
     turntable.setImageBitmap(redrawnBitmap); 
    }else 
    { 
     Bitmap redrawnBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap 
       .getWidth(), bitmap.getHeight(), matrix, true); 
     turntable.setImageBitmap(redrawnBitmap); 
     Log.i("GUITAR _IMAGE", ""); 
    } 

} 

}私は、ユーザーが画面に触れた時点で画像を回転させるようにしたいと推定

+0

@dhams何を試しましたか?あなたのコードでタッチイベントを「見る」(つまり処理する)ことはできますか? – gary

+0

また、どのタッチイベントに返信したいですか?私はドラッグ/スワイプすることを前提としていますが、より詳細な情報が役立ちます。 – gary

+0

ねえ、私は更新コードを持っている,,, plzはそれをチェック.. – dhams

答えて

1

のですか?その場合、この例のようにSimpleOnGestureListenerを拡張:

public class MyGestureDetector extends SimpleOnGestureListener 
{  

    @Override 
    public void onLongPress(MotionEvent event) 
    { 
     int X = (int)event.getX();   
     int Y = (int)event.getY(); 

     ...Rotate the image 
    } 
} 

を使用すると、タッチイベントの画面座標を持ってたら、ポイントの周りの回転アニメーションを適用できます - 詳細はこちらをご覧ください:http://developer.android.com/guide/topics/graphics/2d-graphics.html

1

私はちょうどbaseviewを取っていないことによってあなたのコードをチェックし、それは正常に動作します。ここで私のコードは、それは私のエミュレータで正常に動作します。

package com.android.practice; 

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

public class JobSearch extends Activity implements OnTouchListener { 

private ImageView dialer; 
private float y=0; 
public boolean onTouch(View v, MotionEvent event) { 
    double r=Math.atan2(event.getX()-dialer.getWidth()/2, dialer.getHeight()/2-event.getY()); 
    int rotation=(int)Math.toDegrees(r); 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      break; 
     case MotionEvent.ACTION_MOVE: 
      //x=event.getX(); 
      y=event.getY(); 
      updateRotation(rotation); 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
    }//switch  

    return true; 

}//onTouch 
private void updateRotation(double rot){ 
    float newRot=new Float(rot); 
    Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.round_button_big); 
    Matrix matrix=new Matrix(); 
    matrix.postRotate(newRot,bitmap.getWidth()/2,bitmap.getHeight()/2); 
    if(y>250){ 
     Bitmap reDrawnBitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true); 
     dialer.setImageBitmap(reDrawnBitmap); 
    } 
    else{ 
     Bitmap reDrawnBitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true); 
     dialer.setImageBitmap(reDrawnBitmap); 
    } 
} 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    dialer = (ImageView) findViewById(R.id.big_button); 
    dialer.setOnTouchListener(this); 
}//onCreate 
} 
関連する問題