2012-02-24 1 views
2

привет в моем приложении Я пытаюсь повернуть кнопку вокруг своего центра, но он не вращается на основе его центра, а не движется от его положения. Ниже мой код, пожалуйста, помогите мне, как для решения этой проблемы.Как повернуть кнопку вокруг своего центра в android

public class example extends Activity { 
float newAngle,oldAngle=0; 


int flag=0; 
int n=340; 
RotateAnimation animation,animation1; 

    Button arrow; 
    Button left,right; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    arrow=(Button)findViewById(R.id.img); 
    left=(Button)findViewById(R.id.left); 
    right=(Button)findViewById(R.id.right); 
    final int width = arrow.getWidth(); 
    final int height = arrow.getHeight();  

    left.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(flag>=0) 
      { 
        newAngle = oldAngle+ 30; 

        oldAngle=newAngle; 
      } 
      flag++; 
      Log.i("flag",""+flag); 
      animation = new RotateAnimation(oldAngle, newAngle); 
      animation.setFillAfter(true); 
      animation.setDuration(200); 
      arrow.startAnimation(animation); 
     } 
    }); 
    } 
     } 

ответ

1

полный пример:

public class MyActivity extends Activity implements View.OnClickListener { 

    private ImageView _image; 
    private float _newAngle, _oldAngle; 


    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(this); 
     _image = (ImageView) findViewById(R.id.image); 
    } 

    public void onClick(View view) { 
     if (view.getId() == R.id.button) { 
      _newAngle = _oldAngle + 30; 

      LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) _image.getLayoutParams(); 
      int centerX = layoutParams.leftMargin + (_image.getWidth()/2); 
      int centerY = layoutParams.topMargin + (_image.getHeight()/2); 
      RotateAnimation animation = new RotateAnimation(_oldAngle, _newAngle, centerX, centerY); 
      animation.setDuration(0); 
      animation.setRepeatCount(0); 
      animation.setFillAfter(true); 
      _image.startAnimation(animation); 

      _oldAngle = _newAngle; 
     } 
    } 
} 
0

использование

RotateAnimation (поплавок fromDegrees, плавать toDegrees, плавать pivotX, плавать pivotY)

pivotX, pivotY - координаты центра кнопки. и это выглядит как ваши углы одинаковы

+1

анимация = новый RotateAnimation (oldAngle, newAngle, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); \t \t \t \t animation.setInterpolator (новый LinearInterpolator()); \t \t \t \t animation.setFillAfter (true); \t \t \t \t анимация.setDuration (200); \t \t \t \t стрелка.стартАнимация (анимация); – user1083266

+0

, когда я осматриваю это для просмотра изображений, он не работает, пожалуйста, помогите мне, как сделать – user1083266

0

Самое простое решение заслуживает внимания:

button.setRotation(angle); 

Положите это в свой метод onClick. Например:

public void onClick(View v) { v.setRotation(v.getRotation() + 30f); } 

См. View API.