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();//重复绘制
}
}
}
运行结果