利用HTML5自定义绘制正在加载图案(spinner)

这几天自己在学习HTML5,看到很多新的元素,总感觉手痒痒,就想自己写一个,今天想起曾经一个项目里用的正在加载图案(spinner)是用的插件,所以自己就像要用canvas绘制一个。

初学HTML5,程序肯定有不完美的地方!!

思路就是绘制一个简单的图形,然后让图形以一个点为中心按一定的速率旋转!


添加canvas元素:

 <canvas id="canvas" width="500" height="500" style="border:1px solid black;background:#484646">

         您的浏览器版本太老,不支持这个控件

</canvas>

绘制图形:

效果如下:

这个很简单,相信用过canvas的都会绘制

//旋转时内圆的半径
    var radiusinner = 60,
    //旋转时外圆的半径
        radiusoutter = 120,
        //每一个花瓣的宽度
        spinwidth = 30,
        //花瓣的数量
        spinnum = 12;

    var canvas = document.getElementById("canvas");
    var context2D = canvas.getContext("2d");

    //为了方便,用于获取长方形的起点坐标
    var s_height = radiusoutter - radiusinner - spinwidth;
    var s_width = spinwidth;
    var s_x = 0 - spinwidth/2
    var s_y = 0 - (radiusoutter - s_width / 2);;

    context2D.translate(radiusoutter, radiusoutter);//改变坐标系的坐标原点
    //用于生成图案中的一个
    function create() {
        context2D.beginPath();
        context2D.arc(0, s_y, s_width/2, 0, Math.PI * 2, true);
        context2D.arc(0, s_y + s_height, s_width/2, 0, Math.PI * 2, true);
        context2D.closePath();
        context2D.fillStyle = "#fff";
        context2D.fill();
        context2D.fillRect(s_x, s_y, s_width, s_height);
    }

我觉得这段程序中,对我学习影响最大的是改变坐标系坐标原点这个地方,最开始的时候,坐标系原点默认的是canvas控件的左上角,但是在图像旋转的时候,是已控件的左上角为参考的,而这里想要的是外圆的圆点处作为旋转的参考点,所以,提前将坐标系的圆点改变,这样方便下面的旋转。

旋转图形:

var snum = 0;
    function move() {
        context2D.clearRect(-120, -120, 500, 500);
        snum = snum === spinnum ? 0 : snum;
        snum++;
        var angle = (snum * 360 / spinnum) * Math.PI / 180;
        context2D.save();
        context2D.rotate(angle);
        create();
        context2D.restore();
    }

    var i = setInterval(move, 30);


这样,就可以自定义完成一个简单的图形!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android中,自定义`Spinner`视图通常涉及到创建一个自定义适配器(Adapter),以控制弹出选项列表的样式和内容。以下是如何实现这一步骤的: 1. **创建自定义Adapter**[^1] 首先,创建一个继承自`ArrayAdapter`或`BaseAdapter`的类,比如`CarBrandAdapter`,并重写关键方法如`getView()`来设置每个选项的显示内容和外观。 ```java public class CarBrandAdapter extends ArrayAdapter<String> { private final Context context; private final String[] carBrands; public CarBrandAdapter(Context context, int resource, String[] objects) { super(context, resource, objects); this.context = context; this.carBrands = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 如果convertView为空,创建一个新的View if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.custom_spinner_item, parent, false); } // 获取并设置Spinner项的内容 TextView textView = convertView.findViewById(R.id.spinner_text); textView.setText(carBrands[position]); // 其他可能的定制,如设置背景颜色或图标 return convertView; } } ``` 2. **在布局文件中设置Spinner** 在XML布局文件中,添加一个`Spinner`组件,并指定其宽度和高度为`wrap_content`,这样它会根据内容自动调整大小。还要设置`adapter`属性,指向自定义的适配器实例。 ```xml <Spinner android:id="@+id/carBrandSpinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:entries="@array/car_brands_array" android:spinnerMode="dropdown" android:popupBackground="@drawable/custom_popup_background" /> ``` 其中,`@array/car_brands_array`是资源数组,包含你的选项数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值