当前位置: 代码迷 >> Android >> canvas图片旋转,该如何处理
  详细解决方案

canvas图片旋转,该如何处理

热度:17   发布时间:2016-05-01 10:39:40.0
canvas图片旋转
本帖最后由 tianke0711 于 2013-05-07 21:13:53 编辑
你好我想实现一个简单的app,就是月亮图片围绕地球图片旋转。
 我是新手主要想用canvas画出月亮和地球图片,然后月亮按照一定的速度绕地球旋转。地球按照一定速度自转。
 我不知道月亮绕地球旋转咋实现,以及地球自转咋实现啊,请高手指点一下啊,有代码参考最好了!
  
Canvas 旋转, 地球月亮

------解决方案--------------------
你用canvas,那就应该是2D绘图了,2D的话,地球自转使用matrix就行,我给你画布旋转的方法吧,比较简单:

        Matrix m = new Matrix();
        m.postTranslate(x,y);//移动到地球中心点
        m.postRotate(degree);//旋转
        c.drawBitmap(bmp,m,paint);//画地球

月球公转的话,使用下面函数来计算圆形上某点坐标:

    protected float xn(float pointX,float pointY,float x,float y,double angle){
        double angleHude = Math.toRadians(angle);//角度转弧度
        double cosAngle = Math.cos(angleHude);
        double sinAngle = Math.sin(angleHude);
        return (float)((pointX-x)*cosAngle-(pointY-y)*sinAngle+x);
    }

    protected float yn(float pointX,float pointY,float x,float y,double angle){
        double angleHude = Math.toRadians(angle);//角度转弧度
        double cosAngle = Math.cos(angleHude);
        double sinAngle = Math.sin(angleHude);
        return (float)((pointX-x)*sinAngle+(pointY-y)*cosAngle+y);
    }

------解决方案--------------------
那个是我没考虑周全
先给你地球自转的吧,公转的我看看下班之前能不能给你写出来:

package org.yye.android.commons.rotate;

import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.os.Handler;

import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.ImageView;
import org.yye.android.commons.R;

import java.util.HashMap;
import java.util.Map;

/**
 * User: ye.yang
 * Date: 13-5-10
 * Time: 上午10:57
 */
public class RotateActivity extends Activity {
    private float degree = 0f;
    private Canvas c;
    private Paint p;
    private Handler handler = new Handler();
    private ImageView iv;
    private int w,h;
    private Bitmap earthBmp;