Android自定义View图片按Path运动和旋转
作者:匆忙拥挤repeat 时间:2022-09-15 22:53:11
本文实例为大家分享了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, 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);
}
}
来源:http://blog.csdn.net/jjwwmlp456/article/details/52046767
标签:Android,View,运动旋转
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
JAVA生成短8位UUID的实例讲解
2021-08-21 04:26:19
Springboot mybatis plus druid多数据源解决方案 dynamic-datasource的使用详解
2021-08-01 19:27:32
Spring Boot项目如何同时支持HTTP和HTTPS协议的实现
2023-11-19 19:57:05
![](https://img.aspxhome.com/file/2023/1/59321_0s.jpg)
c# 爬取优酷电影信息(1)
2022-04-23 13:34:59
基于@RestControllerAdvice与@ControllerAdvice的区别说明
2022-06-24 21:00:36
![](https://img.aspxhome.com/file/2023/6/96266_0s.png)
Java 遍历list和map的方法
2023-02-06 22:23:40
Windows系统中使用C#读取文本文件内容的小示例
2023-05-05 20:27:08
Android播放assets文件里视频文件相关问题分析
2021-08-10 20:04:41
springboot-jta-atomikos多数据源事务管理实现
2022-08-29 19:45:47
![](https://img.aspxhome.com/file/2023/8/125558_0s.png)
Java C++ 算法题解leetcode652寻找重复子树
2022-08-17 23:58:09
![](https://img.aspxhome.com/file/2023/0/61120_0s.jpg)
SpringBoot+LayIM+t-io 实现好友申请通知流程
2023-07-13 11:41:52
![](https://img.aspxhome.com/file/2023/0/126360_0s.png)
Android Studio升级到3.0后遇到的坑
2022-01-23 00:59:07
![](https://img.aspxhome.com/file/2023/3/91643_0s.png)
Java中自动生成构造方法详解
2023-06-21 14:17:44
Yml转properties文件工具类YmlUtils的详细过程(不用引任何插件和依赖)
2021-08-18 03:55:00
![](https://img.aspxhome.com/file/2023/4/77084_0s.png)
详解Spring Cloud Gateway修改请求和响应body的内容
2022-12-03 04:40:05
![](https://img.aspxhome.com/file/2023/1/91051_0s.png)
解决Java导入excel大量数据出现内存溢出的问题
2023-05-30 08:41:20
java代理模式(静态代理、动态代理、cglib代理)
2022-11-22 16:12:49
![](https://img.aspxhome.com/file/2023/7/103827_0s.png)
关于@RequestBody和@RequestParam注解的使用详解
2023-01-20 09:08:20
![](https://img.aspxhome.com/file/2023/4/62654_0s.jpg)
SpringMvc框架的简介与执行流程详解
2022-10-15 18:49:00
![](https://img.aspxhome.com/file/2023/4/62354_0s.jpg)
Android实现签名涂鸦手写板
2022-07-27 04:10:14
![](https://img.aspxhome.com/file/2023/6/138506_0s.jpg)