Android studio 实现随机位置画10个随机大小的五角星的代码

所属分类: 软件编程 / Android 阅读数: 107
收藏 0 赞 0 分享

Android studio:实现随机位置画10个随机大小的五角星今天做了一下老师布置的实验课作业安卓的作业。实现在屏幕上随机位置绘制10个随机大小的五角星。虽然我之前自己学习过安卓,但是还有很多的功能没有用到,学到,比如这次这个画图的功能没有使用过,所以在做这个实验的时候有很多的问题。实现的方法是自己自定义组件,新建一个类来继承View,进行自定义组件。先开始五角星的画法,通过translate(x,y)方法来改变起点的位置,使用rotate()方法进行笔锋的转角。代码如下:

	canvas.translate(10,100);//确定五角星的起点的位置
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);//转的角度
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);

然后就是如何进行随机的选位置随机的的大小,我是用的方法是,代码:

 int x = (int) (Math.random()*600+200);//起点的X轴的位置
   int y = (int) (Math.random()*1000+100);//起点y轴的位置
   int r = (int) (Math.random()*250 +20);//五角星的长度

然后我就把这两个放在一起,用一个For循环循环10次。然而!

在这里插入图片描述

五角星画出去了?这是为什么,我就开始找呀找,然后发现是因为我的画笔的坐标的位置改了,没有改回来,画下一个五角星的时候就会把之前的坐标当成(0,0)。这个可怎么办呀,我想到了一种方式就是打破思路,重新用一种方式,用数学来计算五角星每一笔的起点和终点。这个方法不会出现画出去的情况(数值合理)。

这个方法连接(同学写的)

https://blog.csdn.net/weixin_43624626/article/details/106150822然后:我又想到了看一看有没有别的方式能解决,开始在网上搜,然后就看到了一种方法,可以记住之前的位置,和还原位置。代码:

 canvas.save();//记住一开始坐标的位置
   canvas.translate(x,y);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.restore();//还原上一个记住的位置

成功了!!!!!!!!!!!!!!

在这里插入图片描述

经过多次的实验,没有出现画出去的情况。作业完成了,我写了这篇博客,我看看我之前的博客,发现好像这次的博客写的字好多呀!!!代码:XML:

<com.example.shiyan5.CanvasView
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>

class:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
import java.util.Random;
public class CanvasView extends View {
 public CanvasView(Context context, @Nullable AttributeSet attrs) {
  super(context, attrs);
 }
 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  Paint paint1 = new Paint();
  for (int i = 0; i < 10; i++) {
   Paint paint = paint1;
   paint.setAntiAlias(true);
   paint.setStyle(Paint.Style.STROKE);
   paint.setStrokeWidth(5);
   paint.setColor(Color.GREEN);
   paint.setTextSize(24);
   int x = (int) (Math.random()*600+200);
   int y = (int) (Math.random()*1000+100);
   int r = (int) (Math.random()*250 +20);
   canvas.save();
   canvas.translate(x,y);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.translate(r,0);
   canvas.rotate(144);
   canvas.drawLine(0,0,r,0,paint);
   canvas.restore();
  }
}

觉得不错的话:嘿嘿!

在这里插入图片描述

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多