这个就是使用Paint和Canvas一个个画上去的,再加上动画,总体来说不难,就是变量多,所以看起来的时候要慢慢看,现在在这贴下代码
布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <SeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="10px" android:paddingRight="10px" android:layout_marginTop="20px" /> <LinearLayout android:layout_width="300px" android:layout_height="300px" android:layout_marginTop="90px" android:layout_marginLeft="60px" > <com.example.speeddemo.CarRecorderView android:id="@+id/carview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#8B5F65" /> </LinearLayout> </RelativeLayout>
自定义veiw
package com.example.speeddemo; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader; import android.util.AttributeSet; import android.view.View; /** * Created by admin on 2016/8/28. */ public class CarRecorderView extends View { private static final String TAG = "CarRecorderView" ; private LinearGradient linearGradient = null; private Paint blackCirclePaint; private int blackCirClePaintWidth = 8; private Paint arcAnimPaint; private Paint outerAnimPaint; private Paint whiteCirclePaint ; private Paint unitTextPaint; private int whiteCirclePaintWidth = 24; private Paint outerPaint; private Paint linePaint; private Paint textValuePaint; private Paint interprogressPaint; private int lineWidth = 5; private Paint outerSmallPaint; private RectF outerRectF; private RectF outerAnimRectF ; private Bitmap carBitmap;