国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android自定義View圖片按Path運動和旋轉

2019-10-22 18:16:32
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android自定義View圖片按Path運動旋轉的具體代碼,供大家參考,具體內容如下

Android,View,運動旋轉

View:

/**  * author : stone  * email : aa86799@163.com  * time : 16/5/29 15 29  */ public class EarthPathView extends View {   private Path mPath;  private Paint mPaint;  private Bitmap mBitmap;  private PathMeasure mPathMeasure;  private float[] mPoint;  private float[] mTan;  private float mDdegrees;   public EarthPathView(Context context) {   this(context, null);  }   public EarthPathView(Context context, AttributeSet attrs) {   this(context, attrs, 0);  }   public EarthPathView(Context context, AttributeSet attrs, int defStyleAttr) {   super(context, attrs, defStyleAttr);    mPaint = new Paint();   mPaint.setColor(Color.RED);   mPaint.setStyle(Paint.Style.STROKE);   mPaint.setStrokeWidth(10);    InputStream is = getResources().openRawResource(R.drawable.earth);   mBitmap = BitmapFactory.decodeStream(is);   }   public void setPath(Path path) {   mPath = path;   mPathMeasure = new PathMeasure(path, false);   mPoint = new float[2];   mTan = new float[2];   }   @Override  protected void onDraw(Canvas canvas) {   super.onDraw(canvas);   if (mPath == null) {    return;   }     canvas.rotate(mDdegrees+=2, getWidth()/2, getHeight()/2);   canvas.drawPath(mPath, mPaint);    float degress = (float) Math.toDegrees(Math.atan2(mTan[1], mTan[0]));   Matrix matrix = new Matrix();   matrix.postRotate(degress, mBitmap.getWidth() / 2, mBitmap.getHeight() / 2);   matrix.postTranslate(mPoint[0] - mBitmap.getWidth() / 2, mPoint[1] - mBitmap.getHeight() / 2);   canvas.drawBitmap(mBitmap, matrix, null);    }   @TargetApi(Build.VERSION_CODES.HONEYCOMB)  public void startAnim() {   ValueAnimator animator = ValueAnimator.ofFloat(0, mPathMeasure.getLength());   animator.setDuration(2000);   animator.setInterpolator(new LinearInterpolator()); //插值器   animator.setRepeatCount(ValueAnimator.INFINITE);   animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {    @Override    public void onAnimationUpdate(ValueAnimator animation) {     float distance = (float) animation.getAnimatedValue();     mPathMeasure.getPosTan(distance, mPoint, mTan);     invalidate();    }   });   animator.start();  } } 

Activity

package com.stone.canvaspath;  import android.app.Activity; import android.graphics.Path; import android.os.Bundle;  import com.stone.canvaspath.earth.EarthPathView;  /**  * author : stone  * email : aa86799@163.com  * time : 16/5/29 15 27  */ public class EarthActivity extends Activity {   private EarthPathView mPathView;  private Path mPath;   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);    int w = getResources().getDisplayMetrics().widthPixels;   int h = getResources().getDisplayMetrics().heightPixels;    mPathView = new EarthPathView(this);    setContentView(mPathView);    int min = Math.min(w, h);   buildPath(w / 2 + 100, h / 2 + 100, min / 4);    mPathView.setPath(mPath);    mPathView.startAnim();  }   private void buildPath(float x, float y, float radius) {   mPath = new Path();   mPath.addCircle(x, y, radius, Path.Direction.CW);  }  } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祁东县| 梧州市| 大邑县| 凌海市| 西峡县| 澄江县| 诸城市| 苗栗县| 丹阳市| 江阴市| 丰镇市| 农安县| 宁都县| 莱州市| 临安市| 汕尾市| 商水县| 孟津县| 荣成市| 芮城县| 八宿县| 安新县| 龙海市| 茂名市| 靖安县| 大同市| 阳谷县| 阿瓦提县| 通河县| 罗定市| 融水| 甘谷县| 灵武市| 山阳县| 剑川县| 莒南县| 昭通市| 隆昌县| 海原县| 绵竹市| 固始县|