Android studio动画

public class MainActivity extends AppCompatActivity {
View view;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = (View)findViewById(R.id.view);

        ObjectAnimator scale1 = ObjectAnimator.ofFloat(view,"translationX",0,400f);
        ObjectAnimator scale2 = ObjectAnimator.ofFloat(view,"translationY",0,450f);
        AnimatorSet animset = new AnimatorSet();
        animset.play(scale1).with(scale2);
        animset.setDuration(3000);
        animset.start();
        animset.addListener(new Animator.AnimatorListener() {


//对应相关布局来进行调用动画 和自定义View

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:dabin="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.eightgroup.zk3lx.MainActivity">


    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       android:src="@mipmap/ic_launcher"

        />

    <com.eightgroup.zk3lx.Myview
         android:layout_marginLeft="100dp"
        android:id="@+id/my_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        dabin:stripeWidth="15dp"
        dabin:centerTextSize="16sp"
        dabin:percent="3" />


    <Button
        android:id="@+id/start"
        android:text="Go"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="26dp"
        android:layout_marginStart="26dp"
        android:layout_marginBottom="117dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@color/colorAccent"
        android:layout_alignParentStart="true" />
</RelativeLayout>

//
public class MainActivity extends AppCompatActivity {
     ImageView imageView;
    private Myview myView;
    private Button start;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
          myView = (Myview)findViewById(R.id.my_view);
          start = (Button)findViewById(R.id.start);

        imageView = (ImageView) findViewById(R.id.imageView);
        ObjectAnimator move = ObjectAnimator.ofFloat(imageView,"translationY",0,300f);
        ObjectAnimator scale1 = ObjectAnimator.ofFloat(imageView,"scaleX",1f,2f,1f);
        ObjectAnimator scale2 = ObjectAnimator.ofFloat(imageView,"scaleY",1f,2f,1f);
        AnimatorSet animset = new AnimatorSet();
        animset.play(scale1).with(scale2).after(move);
        animset.setDuration(3000);
        animset.start();
        //动画的监听
        animset.addListener(new Animator.AnimatorListener() {
            //动画开始
            @Override
            public void onAnimationStart(Animator animator) {

            }
            //动画结束
            @Override
            public void onAnimationEnd(Animator animator) {
                Toast.makeText(MainActivity.this, "结束", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }

            @Override
            public void onAnimationCancel(Animator animator) {

            }

            @Override
            public void onAnimationRepeat(Animator animator) {

            }
        });
        //开始
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int n = (int) (Math.random() * 100);
                myView.setPercent(n);
            }
        });



    }


}
//创建View 类   
public class Myview extends View {
    //圆的半径
    private float mRadius;

    //色带的宽度
    private float mStripeWidth;
    //总体大小
    private int mHeight;
    private int mWidth;

    //动画位置百分比进度
    private int mCurPercent;

    //实际百分比进度
    private int mPercent;
    //圆心坐标
    private float x;
    private float y;

    //要画的弧度
    private int mEndAngle;

    //小圆的颜色
    private int mSmallColor;
    //大圆颜色
    private int mBigColor;

    //中心百分比文字大小
    private float mCenterTextSize;

    public Myview(Context context) {
        this(context, null);
    }

    public Myview(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public Myview(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        // 获取自定义属性
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Myview, defStyleAttr, 0);

        //获取色带的宽度
        mStripeWidth = a.getDimension(R.styleable.Myview_stripeWidth, PxUtils.dpToPx(30, context));
        //获取当前的百分比
        mCurPercent = a.getInteger(R.styleable.Myview_percent, 0);
        //获取小园的颜色
        mSmallColor = a.getColor(R.styleable.Myview_smallColor, Color.BLACK);
        //获取大圆的颜色
        mBigColor = a.getColor(R.styleable.Myview_bigColor, Color.WHITE);
        //获取中心文字的大小
        mCenterTextSize = a.getDimensionPixelSize(R.styleable.Myview_centerTextSize, PxUtils.spToPx(50, context));
        //获取园的半径
        mRadius = a.getDimensionPixelSize(R.styleable.Myview_radius, PxUtils.dpToPx(100, context));


    }

    //测量
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //获取测量模式
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        //获取测量大小
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        //如果为确定大小值,则圆的半径为宽度/2
        if (widthMode == MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY) {
            mRadius = widthSize / 2;
            x = widthSize / 2;
            y = heightSize / 2;
            mWidth = widthSize;
            mHeight = heightSize;
        }
        //如果为wrap_content 那么View大小为圆的半径大小*2
        if (widthMode == MeasureSpec.AT_MOST && heightMode == MeasureSpec.AT_MOST) {
            mWidth = (int) (mRadius * 2);
            mHeight = (int) (mRadius * 2);
            x = mRadius;
            y = mRadius;

        }
        //设置视图的大小
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    protected void onDraw(Canvas canvas) {


        mEndAngle = (int) (mCurPercent * 3.6);
        //绘制大圆
        Paint bigCirclePaint = new Paint();
        bigCirclePaint.setAntiAlias(true);
        bigCirclePaint.setColor(mBigColor);


        canvas.drawCircle(x, y, mRadius, bigCirclePaint);


        //饼状图
        Paint sectorPaint = new Paint();

        sectorPaint.setColor(mSmallColor);
        sectorPaint.setAntiAlias(true);
        RectF rect = new RectF(0, 0, mWidth, mHeight);

        canvas.drawArc(rect, 270, mEndAngle, true, sectorPaint);


        //绘制小圆,颜色透明
        Paint smallCirclePaint = new Paint();
        smallCirclePaint.setAntiAlias(true);
        smallCirclePaint.setColor(mBigColor);
        canvas.drawCircle(x, y, mRadius - mStripeWidth, smallCirclePaint);


        //绘制文本
        Paint textPaint = new Paint();
        String text = mCurPercent + "%";
        textPaint.setTextSize(mCenterTextSize);
        float textLength = textPaint.measureText(text);

        textPaint.setColor(Color.RED);
        canvas.drawText(text, x - textLength / 2, y, textPaint);
        super.onDraw(canvas);
    }

    public void setmSmallColor(int mSmallColor) {
        this.mSmallColor = mSmallColor;
        invalidate();
    }

    //重置
    public void setReset(int percent) {
        mCurPercent = percent;
        invalidate();
    }

    //外部设置百分比数
    public void setPercent(int percent) {
        if (percent > 100) {
            throw new IllegalArgumentException("percent must less than 100!");
        }
        setCurPercent(percent);
    }

    //内部设置百分比 用于动画效果
    private void setCurPercent(int percent) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    mCurPercent = i;
                    try {
                        Thread.sleep(40);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    postInvalidate();
                }
            }
        }).start();

    }


}
//应用类
public class PxUtils {
    public static int dpToPx(int dp, Context context) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
    }

    public static int spToPx(int sp,Context context) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
    }
}
//对应的Value 的应用    下自定义一个attrs.xml,

<?xml version="1.0" encoding="utf-8"?>


    <resources>
        <declare-styleable name="Myview">
            <attr name="radius" format="dimension"/>
            <attr name="stripeWidth" format="dimension"/>   <!--色带宽度-->
            <attr name="percent" format="integer"/>         <!--百分比 最大值为100-->
            <attr name="smallColor" format="color"/>        <!--色带宽度-->
            <!--外圈颜色-->
            <attr name="bigColor" format="color"/>

            <!--中间字体颜色-->
            <attr name="centerTextSize" format="dimension"/>
            <!--色带宽度-->
        </declare-styleable>
</resources>


public class View extends android.view.View {
    public View(Context context) {
        super(context);
    }

    public View(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public View(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint =new Paint();
        paint.setColor(Color.BLUE);
        canvas.drawCircle(30,30,30,paint);
    }
}



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值