利用Canvas编程实现在屏幕上随机位置绘制10个随机大小(边长为20-100dp)的五角星。 首先要解决的问题就是绘制五角星,有了五角星 才能谈其他的,绘制五角星有很多种办法,可以利用圆,可以用线段旋转等等。这里用简单的方式即用canvas实现线段的绘制,并通过线段的选转来实现五角星的绘制,话不多说 上代码: 这样就可以绘制成一个五角星了。然而,这个五角星是固定长度,固定位置的。 其次,要实现两个随机 。随机位置、随即大小。这个时候 就可以用ramdom来实现随机数的生成,从而改变五角星的大小和位置。生成随机数一般如下: 但是,题目中有要求,五角星大小为20-100dp(懵懵懂懂的我就认为,生成的随机数为20-100)代码如下: 当解决了以上两个问题之后,接下来要做的就是实现10个五角星的生成,这一步也是最简单的一步,可以直接利用for循环,while循环,或者do……while循环来实现,这里用的for循环: activity_main.xml,这里要注意组件的应用 MainActivity.java CanvasView.java实现五角星绘制的主要代码在里面 这样做完以后,五角星出来了,也随机生成了。但是,生成的五角星不一定在屏幕内 如下图: 在这里,小白跪求路过的大佬直到一下,如何能让它不往屏幕外边跑;要求
过程
一、绘制五角星
canvas.drawLine(1, 5,7, 5, paint); canvas.translate(1, 5); canvas.rotate(36); canvas.drawLine(0, 0, 6 , 0, paint); canvas.translate(6 , 0); canvas.rotate(36); canvas.drawLine(0, 0, -6 , 0, paint); canvas.translate(-6 , 0); canvas.rotate(36); canvas.drawLine(0, 0, 6 , 0, paint); canvas.translate(6 , 0); canvas.rotate(36); canvas.drawLine(0, 0, -6 , 0, paint);
二、生成随机数
int x = new Random().nextInt(100);
int min=20; int max=100; Random random = new Random(); int x = random.nextInt(max)%(max-min+1) + min;
三、利用循环,生成10个五角星
for(int i =0;i<10;i++){循环体……}
四、完整代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <com.example.myexperiment5515.CanvasView android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
package com.example.myexperiment5515; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
package com.example.myexperiment5515; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.View; import java.util.Random; import static java.lang.Math.sin; public class CanvasView extends View { public CanvasView(Context context, AttributeSet attrs) { super(context); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); for(int i =0;i<10;i++){ int min=20; int max=100; Random random = new Random(); int x = random.nextInt(max)%(max-min+1) + min; Paint paint = new Paint();//定义一个画笔对象 paint.setAntiAlias(true);//设置抗锯齿 paint.setStyle(Paint.Style.STROKE);//设置画笔风格 paint.setStrokeWidth(5);//设置画笔粗细 paint.setColor(Color.GREEN);//设置颜色 paint.setTextSize(40);//设置文字显示大小 //绘制五角星 canvas.drawLine(2 * x, 5 * x, 8 * x, 5 * x, paint); canvas.translate(2 * x, 5 * x); canvas.rotate(36); canvas.drawLine(0, 0, 6 * x, 0, paint); canvas.translate(6 * x, 0); canvas.rotate(36); canvas.drawLine(0, 0, -6 * x, 0, paint); canvas.translate(-6 * x, 0); canvas.rotate(36); canvas.drawLine(0, 0, 6 * x, 0, paint); canvas.translate(6 * x, 0); canvas.rotate(36); canvas.drawLine(0, 0, -6 * x, 0, paint); } } }
存在的问题
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算