
本文实例为大家分享了AndroID自定义view图片按Path运动旋转的具体代码,供大家参考,具体内容如下
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,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); } } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
您可能感兴趣的文章:Android自定义View实现QQ运动积分转盘抽奖功能Android 自定View实现仿QQ运动步数圆弧及动画效果Android自定义View仿微博运动积分动画效果Android UI之ImageView实现图片旋转和缩放Android使用RotateImageView 旋转ImageViewAndroid UI设计系列之ImageView实现ProgressBar旋转效果(1)Android自定义View叶子旋转完整版(六)Android自定义View实现QQ音乐中圆形旋转碟子Android自定义View实现叶子飘动旋转效果(四)Android中imageView图片放大缩小及旋转功能示例代码 总结以上是内存溢出为你收集整理的Android自定义View图片按Path运动和旋转全部内容,希望文章能够帮你解决Android自定义View图片按Path运动和旋转所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)