zoukankan      html  css  js  c++  java
  • 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();
    
    
    
            }
        }
    
    }
    
    
  • 相关阅读:
    软件工程(2019)第一次作业
    Coding.net主页地址链接
    解决Oracle 11g重建em时报错创建档案资料库时出错以及删除原有em时报监听程序未启动
    解决VirtualBox与锐捷网络冲突的问题
    王道数据结构复习(一)
    第二次结对编程—四则运算自动生成程序
    软件工程(2019)结对编程第一次作业
    软件工程(2019)第三次个人作业——求最大子段和(于VS2017下代码覆盖单元测试)
    软件工程(2019)第二次作业
    软件工程第一次作业
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781732.html
Copyright © 2011-2022 走看看