Canvas绘制QQ图标(demo)

这里写图片描述
MainActivity.java

package com.jsjrjsb1504.sdut.gesture;

import android.content.Context;
import android.graphics.*;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class Main2Activity extends AppCompatActivity {

    float rationpieceOfWidth = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        FrameLayout mFrameLayout = findViewById(R.id.framelayout);
        //将当前的布局和内部类相关联
        mFrameLayout.addView(new Myview(this));
    }

    //内部类用于绘画
    public class Myview extends View {

        public Myview(Context context) {

            super(context);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            rationpieceOfWidth = canvas.getWidth();
            super.onDraw(canvas);
            //创建一支画笔
            Paint paint = new Paint();
            paint.setColor(Color.BLACK);
            paint.setAntiAlias(true);
            //设置画笔粗细
            paint.setStrokeWidth(2);
            //设置是否为空心
            paint.setStyle(Paint.Style.FILL_AND_STROKE);

            //脚丫
            paint.setColor(Color.argb(255, 180, 130, 34));
            RectF mRectF_leg = new RectF(
                    rationpieceOfWidth / 8 + rationpieceOfWidth / 20,
                    rationpieceOfWidth - rationpieceOfWidth / 10,
                    rationpieceOfWidth / 2 - rationpieceOfWidth / 20,
                    rationpieceOfWidth + rationpieceOfWidth / 20);
            canvas.drawOval(mRectF_leg, paint);
            mRectF_leg.offset(rationpieceOfWidth * 3 / 8, 0);
            canvas.drawOval(mRectF_leg, paint);

//            //绘制肚子
            paint.setColor(Color.BLACK);
            RectF mRectF_belly = new RectF(
                    rationpieceOfWidth * 3 / 24,
                    rationpieceOfWidth / 3,
                    rationpieceOfWidth * 9 / 12 + rationpieceOfWidth * 3 / 24,
                    rationpieceOfWidth);
            canvas.drawOval(mRectF_belly, paint);


            //绘制头部
            paint.setColor(Color.BLACK);
            RectF mRectF_head = new RectF(rationpieceOfWidth / 6,
                    rationpieceOfWidth / 8,
                    rationpieceOfWidth / 6 + rationpieceOfWidth * 2 / 3,
                    rationpieceOfWidth * 5 / 6);

            canvas.drawOval(mRectF_head, paint);
            //   canvas.drawArc(mRectF_head, 150, 250, true, paint); //顺时针旋转

            paint.setColor(Color.WHITE);
            //胳膊

            paint.setColor(Color.WHITE);
            RectF eyes = new RectF(rationpieceOfWidth * 37 / 96,
                    rationpieceOfWidth / 4,
                    rationpieceOfWidth * 45 / 96, rationpieceOfWidth / 4 + rationpieceOfWidth / 10);
            canvas.drawOval(eyes, paint);
            eyes.offset(rationpieceOfWidth / 6, 0);
            canvas.drawOval(eyes, paint);

            paint.setColor(Color.BLACK);
            RectF mRectF_eyes = new RectF(
                    rationpieceOfWidth * 37 / 96 + rationpieceOfWidth / 25,
                    rationpieceOfWidth / 4 + rationpieceOfWidth / 30,
                    rationpieceOfWidth * 37 / 96 + rationpieceOfWidth / 13,
                    rationpieceOfWidth / 4 + rationpieceOfWidth / 12);
            canvas.drawOval(mRectF_eyes, paint);
            mRectF_eyes.offset(rationpieceOfWidth / 6, 0);
            RectF mRectF_rightEyes = new RectF(mRectF_eyes);

            mRectF_rightEyes.set(mRectF_eyes.left - rationpieceOfWidth / 50, mRectF_eyes.top, mRectF_eyes.right - rationpieceOfWidth / 50, mRectF_eyes.bottom);


            canvas.drawArc(mRectF_rightEyes, 120, 300, true, paint); //顺时针旋转


            //嘴巴
            paint.setColor(Color.argb(255, 180, 130, 34));
            RectF mRectF_mouth = new RectF(
                    rationpieceOfWidth / 3,
                    rationpieceOfWidth / 2 - rationpieceOfWidth / 10,
                    rationpieceOfWidth / 2 + rationpieceOfWidth / 6,
                    rationpieceOfWidth / 2);
            canvas.drawOval(mRectF_mouth, paint);



            //肚皮
            paint.setColor(Color.WHITE);
            RectF mRectF_abdomen = new RectF(
                    rationpieceOfWidth * 5 / 24,
                    rationpieceOfWidth * 7 / 12,
                    rationpieceOfWidth * 7 / 12 + rationpieceOfWidth * 5 / 24,
                    rationpieceOfWidth - rationpieceOfWidth / 20
            );
            canvas.drawOval(mRectF_abdomen, paint);


            //围脖
            RectF mRectF_neck = new RectF();


            //胳膊
            canvas.save();
            paint = new Paint(Color.BLACK);
            canvas.translate(rationpieceOfWidth * 7 / 8, rationpieceOfWidth / 2);
            RectF mRectF_rightArm = new RectF();
            mRectF_rightArm.set(0, 0,
                    rationpieceOfWidth / 2 - rationpieceOfWidth / 6,
                    rationpieceOfWidth / 10);
            canvas.rotate(60);
            canvas.drawOval(mRectF_rightArm, paint);
            canvas.restore();

            canvas.save();

            paint.setColor(Color.BLACK);
            canvas.translate(rationpieceOfWidth / 8+rationpieceOfWidth/10, rationpieceOfWidth / 2+rationpieceOfWidth/20); //回到最开始的左上角
          //  mRectF_rightArm.offset(-rationpieceOfWidth*3/2/4, (float) (rationpieceOfWidth*3/2/4*Math.sqrt(3)));
            canvas.rotate(120);
            canvas.drawOval(mRectF_rightArm, paint);





          //  canvas.translate(rationpieceOfWidth, rationpieceOfWidth / 2);
//            RectF mRectF_arm = new RectF(rationpieceOfWidth / 2, 0,
//                    rationpieceOfWidth / 2 - rationpieceOfWidth / 6,
//                    rationpieceOfWidth / 10);
//
//            mRectF_arm.set(mRectF_arm.right - rationpieceOfWidth / 4, mRectF_arm.top, mRectF_arm.right, mRectF_arm.bottom);
//            canvas.drawOval(mRectF_arm, paint);
            canvas.restore();



        }
    }

}

猜你喜欢

转载自blog.csdn.net/cccrunner/article/details/80181285
今日推荐