Android_graph(各种图案)

Android_graph(各种图案)

在这里插入图片描述
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.a512_sy_graph">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.512_sy_graph">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".huituActivity"></activity>
    </application>

</manifest>

huituActivity

package com.example.a512_sy_graph;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.Nullable;

public class huituActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));//新建了一个视图(自定义),不需要写布局
    }
    class MyView extends View{

        public MyView(Context context) {
            super(context);
        }
        protected void onDraw(Canvas canvas){
            canvas.drawColor(Color.WHITE);//设置画布为白色
            Paint paint=new Paint();//创建一支画笔
            paint.setColor(Color.BLUE);//设置画笔为蓝色
            paint.setAntiAlias(true);//设置画笔抗锯齿
            paint.setStyle(Paint.Style.STROKE);//设置画笔为空心
            paint.setStrokeWidth(2.5f);//设置画笔的粗细
            canvas.drawCircle(35,35,25,paint);//以(35,35)为原点,半径为25画圆
            RectF r1=new RectF(10,70,60,100);//创建一个圆角矩形
            canvas.drawOval(r1,paint);//画椭圆
            canvas.drawRect(10,110,60,140,paint);//绘制矩形
            RectF r2=new RectF(10,150,60,180);//创建一个圆角矩形
            canvas.drawRoundRect(r2,15,15,paint);//绘制一个圆角矩形

            Path path1=new Path();
            //画空心三角形
            path1.moveTo(10,230);//设置路径的起点
            path1.lineTo(60,230);//绘制一条直线
            path1.lineTo(35,190);
            path1.close();//闭合路径
            canvas.drawPath(path1,paint);

            //画实心三角形
            paint.setStyle(Paint.Style.FILL);//将画笔设置为实心
            paint.setColor(Color.YELLOW);//设置画笔颜色为黄色
            path1.moveTo(40,230);//设置路径的起点
            path1.lineTo(90,230);//绘制一条直线
            path1.lineTo(65,190);
            path1.close();//闭合路径
            canvas.drawPath(path1,paint);
        }
    }
}

MainActivity.java

package com.example.a512_sy_graph;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ComposePathEffect;
import android.graphics.CornerPathEffect;
import android.graphics.DashPathEffect;
import android.graphics.DiscretePathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathDashPathEffect;
import android.graphics.PathEffect;
import android.graphics.RadialGradient;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.SumPathEffect;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
    }
    class MyView extends View
    {
        float phase1=0;
        float phase2=0;
        Path path;
        public MyView(Context context) {
            super(context);
            path=new Path();
            path.moveTo(0, 0);
            for (int i = 1; i <= 10; i++)
            {
                //生成15个点,随机生成它们的Y座标。并将它们连成一条Path
                path.lineTo(i * 30, (float) Math.random() * 20);
            }

        }
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            //设置画布为白色
            canvas.drawColor(Color.WHITE);
            //设置画笔样式
            Paint paint=new Paint();
            //抗锯齿
            paint.setAntiAlias(true);
            paint.setColor(Color.BLUE);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(2.5f);
            //绘制圆形
            canvas.drawCircle(35, 35, 25, paint);
            //绘制椭圆
            RectF r1=new RectF(10, 70, 60, 100);
            canvas.drawOval(r1, paint);
            //绘制矩形
            canvas.drawRect(10,110,60,140,paint);
            //绘制圆角矩形
            RectF r2=new RectF(10, 150, 60, 180);
            canvas.drawRoundRect(r2, 15, 15, paint);
            //绘制路径为三角形的图形
            Path path1=new Path();
            path1.moveTo(10, 230);
            path1.lineTo(60, 230);
            path1.lineTo(35, 190);
            path1.close();
            canvas.drawPath(path1, paint);
            //重新设置画笔样式
            paint.setColor(Color.YELLOW);
            paint.setStyle(Paint.Style.FILL);
            //重新绘制以上图形的另一种样式
            canvas.drawCircle(95, 35, 25, paint);
            RectF r3=new RectF(70, 70, 120, 100);
            canvas.drawOval(r3, paint);
            canvas.drawRect(70,110,120,140,paint);
            RectF r4=new RectF(70, 150, 120, 180);
            canvas.drawRoundRect(r4, 15, 15, paint);
            Path path2=new Path();
            path2.moveTo(70, 230);
            path2.lineTo(120, 230);
            path2.lineTo(95, 190);
            path2.close();//闭合路径
            canvas.drawPath(path2, paint);
            //设置渲染效果
            Shader myShader=new RadialGradient(0, 0, 25,
                    new int[]{Color.GREEN,Color.RED},
                    null,Shader.TileMode.REPEAT);
            paint.setShader(myShader);
            paint.setShadowLayer(15, 5, 5, Color.BLACK);
            //再次绘制图形
            canvas.drawCircle(155, 35, 25, paint);
            RectF r5=new RectF(130, 70, 180, 100);
            canvas.drawOval(r5, paint);
            canvas.drawRect(130,110,180,140,paint);
            RectF r6=new RectF(130, 150, 180, 180);
            canvas.drawRoundRect(r6, 15, 15, paint);
            Path path3=new Path();
            path3.moveTo(130, 230);
            path3.lineTo(180, 230);
            path3.lineTo(155, 190);
            path3.close();
            canvas.drawPath(path3, paint);
            //取消渲染效果
            paint.setShader(null);
            //取消阴影
            paint.setShadowLayer(0, 0, 0, 0);
            //设置文字大小
            paint.setTextSize(20);
            //设置文字颜色
            paint.setColor(Color.BLACK);
            //绘制字符串
            canvas.drawText("圆形", 225, 45, paint);
            canvas.drawText("椭圆", 215, 90, paint);
            canvas.drawText("矩形", 215, 135, paint);
            canvas.drawText("圆角矩形", 195, 170, paint);
            canvas.drawText("三角形", 210, 220, paint);
            //使用PathEffect
            paint.setStyle(Paint.Style.STROKE);
            PathEffect[] pathEffects=new PathEffect[8];
            //不添加PathEffect
            pathEffects[0]=null;
            //添加CornerPathEffect效果
            pathEffects[1]=new CornerPathEffect(5);
            //添加DashPathEffect效果
            pathEffects[2]=new DashPathEffect(new float[]{2,8,15,2}, phase1);
            //添加DiscretePathEffect效果
            pathEffects[3]=new DiscretePathEffect(1.5f,5);
            //添加PathDashPathEffect效果
            Path path5=new Path();
            path5.addRect(0 , 0, 5, 5, Path.Direction.CCW);
            pathEffects[4]=new PathDashPathEffect(path5, 2.0f, phase1, PathDashPathEffect.Style.ROTATE);
            //添加SumPathEffect效果
            pathEffects[5]=new SumPathEffect(pathEffects[3], pathEffects[4]);
            //添加ComposePathEffect效果
            pathEffects[6]=new ComposePathEffect(pathEffects[2], pathEffects[3]);
            //对比ComposePathEffect和SumPathEffect
            pathEffects[7]=new SumPathEffect(pathEffects[2], pathEffects[3]);

            canvas.translate(0, 50);//移动画布
            for (int i = 0; i <=3; i++){
                paint.setPathEffect(pathEffects[i]);
                canvas.drawPath(path1, paint);
                canvas.translate(60, 0);
            }
            canvas.translate(-240, 55);
            for (int i = 4; i <=7; i++){
                paint.setPathEffect(pathEffects[i]);
                canvas.drawPath(path1, paint);
                canvas.translate(60, 0);
            }
            canvas.translate(-230, 250);
            PathEffect pathEffect=new DashPathEffect(new float[]{15,10,5,10}, phase2);
            paint.setPathEffect(pathEffect);
            canvas.drawPath(path, paint);
            phase2+=1;
            //重绘
            invalidate();//重复绘制
        }
    }
}

运行结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值