自定义控件实现点状进度条

点状进度图:用离散点阵重构进度可视化 进度条作为基础UI组件,长期面临信息密度低、状态表达弱、响应式适配难等共性瓶颈。其本质是将线性数值映射为连续填充,难以承载过程结构与业务语义。点状进度图通过将‘完成量’解耦为可枚举的业务单元序列,以点距、点态、空隙节奏等视觉变量隐式编码分布质量、异常位置与时序特征,显著提升首次注视效率与异常识别能力。该方案兼顾轻量级实现(纯CSS+少量JS)、无障碍合规(ARIA语义化)与跨端一致性,适用于Dashboard设计、实时监控看板及嵌入式数据终端等场景,是数据可视化在UI动效与业务可解释性之间的重要平衡点。 阅读详情

转载请注明本文地址:
http://blog.youkuaiyun.com/springcoder/article/details/52296036

本来最近做一个项目想找个不一样点的progressbar,然后看到了一个四点状的progressbar不过需要金币才能下载,算了反正也写的不是那么的适用,干脆直接自己写一个吧。我写东西喜欢封装的过瘾点,多来点set方法给以后用的人自己set去,于是他们只做了点的我就一定做个既可以空心也可以实心的,还可以改变点的数目颜色的,于是花了一个小时左右的时间,写了这个东东

一。废话不多说,先上效果图

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

二。具体代码

一。首先自定义一个点

这个点可以是空心的,也可以是实心的,其实就是一个圆圈,在这里我们给他的属性有,颜色,半径,是否是空心的还是实心的,还有空心的那么线条的粗细是多少呢,这里我是写的是用半径除以6 ,看起来效果还不错,嗯就用他了


import android.graphics.Canvas;
import android.graphics.Paint;
import android.icu.text.DateFormat;

/**
 * Created by sunshine on 2016/8/23.
 */
public class Dot {
    /**
     * 圆点的坐标
     */
    private  double x;
    private double y;
    private float radious;
    /**
     * 圆圈的中心是不是满的
     */
    private boolean isFill;
    private Paint paint;
    private int color;

    /**
     *  默认的空虚圆圈的边线宽是三
     * @param x
     * @param y
     * @param radious
     * @param color
     */
    public Dot(double x, double y, float radious, int color) {
        this.x = x;
        this.y = y;
        this.radious = radious;
        this.color = color;
        isFill=true;
        paint=new Paint();

    }

    public double getX() {
        return x;
    }

    public void setX(float x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(float y) {
        this.y = y;
    }

    public float getRadious() {
        return radious;
    }

    public void setRadious(float radious) {
        this.radious = radious;
    }

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        color = color;
    }

    public void setLovation(float x,float y){
        this.x=x;
        this.y=y;
    }
    public void drawSelf(Canvas canvas){
        if(isFill){
            paint.setStyle(Paint.Style.FILL);
        }else{
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(radious/6);
        }
        paint.setColor(color);
        //设置抗锯齿
        paint.setAntiAlias(true);
        canvas.drawCircle((float)x,(float)y,radious,paint);
    }

    public boolean isFill() {
        return isFill;
    }

    public void setFill(boolean fill) {
        isFill = fill;
    }

解释一下以上代码:
其实实现这个可以在DotProgressBar中直接绘制圆圈,不过因为考虑到每个点的颜色可能不同,那么就会造成我们会多次的 设置画笔,造成一些麻烦,索性直接做成一个类,然后在其中添加一个drawSelf(Canvas canvas)的方法

二。其次就是我们的主角了

首先我们先定义一个DotProgressbar继承自View

public class DotProgressbar extends View {
        public DotProgressbar(Context context) {
        super(context);
        init();
    }

    public DotProgressbar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public DotProgressbar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

}

我们 一般前两个构造函数都需要,没有第二个xml文件是不能识别我们的视图的

在这里我们考虑的是怎样画那几个圆圈,那几个圆圈是一直都分布在一个更大的圆上,于是我们便可以动态额改变这个大圆的半径达到的动态的改变点的位置,形成一种动画效果

/**
* 所有圆圈围城的半径
*/
   private float radious;

然后我们定义两个点之间的轨迹形成的夹角为theta

    /**
     * 两个点的轨迹之间的夹角
     */
    private float theta;

然后接下来就是对我们需要拿到整个视图的大小,然后将视图切成正方形的,同时计算最大的圆的半径是多少,并且给所有的点一个初始值
在View中view 的绘制顺序为:构造函数->onMeasure()->onLayout()->onDraw()
如果我们在构造函数中getWidth(),getHeight()那么得到的值都是0,因为视图还没有进行测量,所以我这里选择在onLayout中拿到视图的宽高,并且初始化每一个点的位置

 /**
     * 重写onlayout方法计算控件的高度宽度,以及初始化点的布局
     * @param changed
     * @param left
     * @param top
     * @param right
     * @param bottom
     */
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);

        //得到控件的宽高
        width=getWidth();
        height=getHeight();
        //将视图切成一个方形的
        if(height>width){
            square=width;
        }else {
            square=height;
        }
        //得到中心的坐标方便后续布置点的位置
        centerX=width/2;
        centerY=height/2;

        theta= (float) (2*Math.PI/num);
        L=square/2-dotRadious;
        radious= (float) (L*Math.sin(t));

        dots=new Dot[num];
        //初始化开始的时候的点的坐标,以及颜色
        for (int i=0;i<num;i++){

            dots[i]=new Dot(centerX,centerY,dotRadious,colors[i]);
            if (!isFull){
                dots[i].setFill(false);
            }
        }
    }

最后将所有的点在onDraw方法中绘制出来就行了

  /**
     * 通过每个点的位置不断的绘制点
     * @param canvas
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        for (int i=0;i<num;i++){
            dots[i].drawSelf(canvas);
        }
        if(speed>1){
            speed=0.9;
        }else if (speed<=0){
            speed=0;
        }
        long timeDelay= (long) (100-100*speed);

        handler.postDelayed(runnable,timeDelay);
    }

在这里我们的点需要 动态的改变位置,也就是大圆需要改变半径,这里我们用handler来动态的 改变并刷新视图

    private Handler handler =new Handler();
    private Runnable runnable=new Runnable() {
        @Override
        public void run() {
            if(t>Math.PI*2){
                t=0;
            }
            t+=0.1;
            double r=L*Math.sin(t);
            //重新计算每个点的位置
            for (int i=0;i<num;i++){
                float  x1= (float) (r*Math.sin(i*theta))+centerX;
                float  y1= (float) (r*Math.cos(i*theta))+centerY;
                dots[i].setLovation(x1,y1);
            }
            invalidate();
        }
    };

注意:一定要用invalidate刷新视图

很简单的,其他的就不多说了,下面贴出所有的源码:
DotProgressbar.java


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;

import com.ccx.dotprogressbar.bean.Dot;

/**
 * Created by sunshine on 2016/8/23.
 */
public class DotProgressbar extends View {
    /**
     * 整个view的属性
     */
    private float height;
    private float width;
    private float square;
    /**
     * 圆点的半径
     */
    private float radious;
    /**
     *  点的数目以及颜色
     */
    private int num=3;
    private int colors[]={Color.RED,Color.GREEN,Color.BLUE};


    /**
     * 点是否是实心的
     */
    private boolean isFull=true;


    //小圆圈的半径
    private float dotRadious=25;
    private Dot dots[];

    /**
     * 时间,其实是控制角度
     */
    private float t;

    /**
     * 通过handler来实现定时器
     */

    private float centerX;
    private float centerY;


    private float L;

    /**
     * 两个点的轨迹之间的夹角
     */
    private float theta;

    /**
     * 设置转动的速度
     */
    private double speed=1;

    private Handler handler =new Handler();
    private Runnable runnable=new Runnable() {
        @Override
        public void run() {
            if(t>Math.PI*2){
                t=0;
            }
            t+=0.1;
            double r=L*Math.sin(t);
            //重新计算每个点的位置
            for (int i=0;i<num;i++){
                float  x1= (float) (r*Math.sin(i*theta))+centerX;
                float  y1= (float) (r*Math.cos(i*theta))+centerY;
                dots[i].setLovation(x1,y1);
            }
            invalidate();
        }
    };


    public DotProgressbar(Context context) {
        super(context);
        init();
    }

    public DotProgressbar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public DotProgressbar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }


    /**
     * 重写onlayout方法计算控件的高度宽度,以及初始化点的布局
     * @param changed
     * @param left
     * @param top
     * @param right
     * @param bottom
     */
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);

        //得到控件的宽高
        width=getWidth();
        height=getHeight();
        //将视图切成一个方形的
        if(height>width){
            square=width;
        }else {
            square=height;
        }
        //得到中心的坐标方便后续布置点的位置
        centerX=width/2;
        centerY=height/2;

        theta= (float) (2*Math.PI/num);
        L=square/2-dotRadious;
        radious= (float) (L*Math.sin(t));

        dots=new Dot[num];
        //初始化开始的时候的点的坐标,以及颜色
        for (int i=0;i<num;i++){

            dots[i]=new Dot(centerX,centerY,dotRadious,colors[i]);
            if (!isFull){
                dots[i].setFill(false);
            }
        }
    }

    /**
     * 初始化
     */
    public void init(){
        speed=0.5;
        radious=5;
    }

    /**
     * 通过每个点的位置不断的绘制点
     * @param canvas
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        for (int i=0;i<num;i++){
            dots[i].drawSelf(canvas);
        }
        if(speed>1){
            speed=0.9;
        }else if (speed<=0){
            speed=0;
        }
        long timeDelay= (long) (100-100*speed);

        handler.postDelayed(runnable,timeDelay);
    }


    public void setDotRadious(float dotRadious) {
        this.dotRadious = dotRadious;
    }
    public void setNumAndColor(int colors[]){
        this.colors=colors;
        this.num=colors.length;
    }

    public void setDotFilled(boolean isFull){
        this.isFull=isFull;
    }

    public void setSpeed(double speed) {
        this.speed = speed;
    }
}

布局文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".activity.MainActivity">
    <LinearLayout
        android:background="#aaaaaaaa"
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <com.ccx.dotprogressbar.custom.DotProgressbar
            android:id="@+id/dot_progress"
            android:layout_gravity="center"
            android:layout_width="150dp"
            android:layout_height="150dp" />
        <TextView
            android:textColor="@color/colorAccent"
            android:layout_marginTop="5dp"
            android:layout_gravity="center"
            android:text="正在联系陈冰雪..."
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>


</RelativeLayout>

MainActivity.java

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.ccx.dotprogressbar.R;
import com.ccx.dotprogressbar.custom.DotProgressbar;

public class MainActivity extends AppCompatActivity {
    private DotProgressbar progressbar;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressbar= (DotProgressbar) findViewById(R.id.dot_progress);
        int colors[]={Color.BLUE,Color.GREEN,Color.CYAN,Color.YELLOW,Color.BLACK};
        progressbar.setNumAndColor(colors);
        progressbar.setDotRadious(30);
        progressbar.setSpeed(1);
    }
}
Qt5 GUI编程实战:从自定义控件到多线程优化的核心技巧 在C++桌面应用开发中,图形用户界面(GUI)的实现与优化是提升用户体验的关键环节。Qt框架以其强大的跨平台能力和丰富的组件库,成为该领域的主流选择。其核心原理在于信号与槽的通信机制、模型/视图的分离设计以及基于事件的渲染体系,这些特性共同支撑了高效、可维护的界面开发。从技术价值看,掌握Qt不仅能快速构建标准界面,更能通过自定义控件、样式表(QSS)和高级绘图(QPainter)实现独特的视觉效果,满足专业软件的需求。在实际应用场景中,开发者常面临界面卡顿、内存管理以及复杂交互(如拖放操作、Web内容集成) 阅读详情

相关推荐

Qml水波进度条、扇形进度条等其他进度条

前言 因为需求所致,需要采用进度条,开始采用的是普通的横线进度条,感觉效果也不错,后面改成了水波进度条,也就是好看了一点,在后面改成了扇形进度条,逼迫无奈啊!!!最终采用了扇形进度条, 除了横线的QML自己提供,其他的都要自己计算位置自己来画,甚是麻烦,于是记录下来,也给后面需求的人一个参考吧! 废话不多说了,看下面代码,,列出三种不同的进度条画法和对应的效果图!!! 下面效果图的时间测试都是80...

波风水门 2088

进度条上的小圆点怎么做_如何实现圆形的进度条(ProgressBar)

在我们实际的工作中可能经常使用到圆形的进度条,但是这是怎么实现的呢?其实这只不过是修改了一下ProgressBar的模板,我们在下面的代码中我们将ProgressBar的Value值绑定到Border的Background上面,并且使用了一个ValueToProcessConverter的转换器进行相应地转换,这里重点介绍一下这个转换器下面介绍这部分的源码,并做简要的分析:首先,获取Progres...

weixin_39705193的博客 1687

安卓进度条loadingprogress相关-点状的进度条dotted-progress-bar-master.zip

点状的进度条dotted-progress-bar-master.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

ProgressBar圆形进度

ProgressBar 的圆形进度很容易实现,但是不经常用的话,时间一长容易忘记,到用的时候,又要百度一番,到处找。这里记录一下,方便日后使用。

ganduwei的博客 936

Android Canvas绘制点状图层,PopWindow选择点符号样例示范

Android Canvas绘制点状图层,PopWindow选择点符号样例示范

自定义进度条(带点击效果)

自定义的view,实现进度条功能,有点击效果

自定义圆形ProgressBar

公司的项目已经完成了几个了,无一例外,都有计步的功能,我的天哪,能不能有点创意,好吧,既然还要套代码,那么就把一些刁钻的UI给封装好,以后就可以直接使用提高效率了。说是刁钻,其实也并没有很夸张,只是原生控件实现不了而已。 这次的自定义View就是RoundProgressBar,顾名思义,圆形的ProgressBar而已,网上其实也有相关的博客,但我这里并不是简单的在View上面画个圆而已,我会

生为码农,死亦码奴 1064

JavaScript实现简单进度条效果

本文实例为大家分享了JavaScript实现进度条效果的具体代码,供大家参考,具体内容如下 效果图: 简单说一下思路: 主要就是进度条的宽度的动态调整!要用到JS的间隔定时器 setInterval( ) setInterval( ) 功能:每隔指定时间调用一次函数 参数:函数,时间间隔 返回值:定时器编号(数字) 想让它到一定的宽度就停止,那么需要设定它的最大宽度,在它外面套一个有宽度的元素就可以啦!这样的话控制它在父元素里的百分比就行了。 在函数里进行判断是否道达指定宽度,没有到达就增长,否则就停止。 为了便于理解,后面JS代码中也有注释 1.HTML结构 <div id="box

flutter---进度条(2)

2.播放/暂停按钮的点击事件。分段选择器进度条的实现步骤。6.使用这个播放器进度条。点状进度条的实现步骤。音频播放器的实现步骤。4.构造播放器进度条。

m0_50891221的博客 229

PCL读取点云数据报错:Failed to find match for field ‘x‘/ ‘y‘/ ‘z‘.

原因:使用matlab生成的pcd文件,点云数据是双精度类型,pcl处理的点云数据是单精度类型。解决方案:使用matlab生成的点云坐标单精度化,然后在生成点云加以存储。

little_white138的博客 868

如何运用好DeepSeek为自己服务:智能增强的范式革命 || 目录

1.1 认知增强的三次浪潮1.2 DeepSeek认知增强模型1.3 人机认知耦合协议1.4 认知增强的数学基础。

𝓓𝓸𝓶𝓲𝓷𝓪𝓽𝓲𝓷𝓰 𝓐𝓵𝓵 𝓣𝓱𝓲𝓷𝓰𝓼 1220

自定义 音频频谱控件、音视频播放进度条控件、伸缩Seekbar开关控件

CustomViewDemo 这是一个自定义 音频频谱控件、音视频播放进度条控件、伸缩Seekbar开关控件的demo 年前的聊天室功能今天上线了,忙碌了好一阵子 期间自定义了一些控件,因为需求上要求的效果在网上没有找到,就自己画了,现在写个demo记录一下 老规矩,看看做出来的效果图: ...

WOL965的博客 1759

制造业私有化LLM部署实战:从RAG到智能体,构建企业专属知识大脑

大型语言模型(LLM)作为人工智能的核心技术,通过在海量文本数据上进行预训练,具备了强大的语言理解和生成能力。其原理在于基于Transformer架构,通过自注意力机制捕捉长距离语义依赖。这一技术价值在于能将非结构化信息转化为可计算、可推理的知识,从而赋能企业实现知识的高效管理与应用。在制造业等强数据安全与知识密集型领域,私有化部署的LLM结合检索增强生成(RAG)和智能体(Agent)技术,能够深入业务流程,构建安全、专属的智能知识中枢。本文聚焦于如何利用Qwen、LangChain、向量数据库等技术栈,

weixin_42523711的博客 247

React使用antd的Steps控件的问题

项目所使用的是antd 2.x版本,由于业务需要,弄一个进度条,使用Steps控件来实现目标的实现效果:需要的效果就是,竖着的,点状的步骤,并且文字都是可以点击的但是在使用Steps控件的过程中,因为需要竖着的,但是在查看antd使用的时候,使用codePen来实现竖着点状步骤是可以的,但是在项目中变成了这样找了很久,没有找到原因,所有就把Steps的style覆盖掉了:global { .a...

qq_16256793的专栏 8655

什么是OAuth 2.0?

OAuth2.0是一种授权协议而非登录协议,核心思想是通过令牌(Token)而非密码实现安全授权。它涉及三个关键角色:用户、第三方应用和身份提供商(IdP)。最常用的授权码流程(AuthorizationCode Flow)通过浏览器三方对话,确保用户密码只提供给IdP而非第三方应用。OAuth2.0提供四种授权方式,其中授权码和客户端凭证是当前主流,而隐式和密码模式已不推荐。需要注意的是,OAuth2.0解决的是授权问题,身份认证需通过OpenID Connect实现。该协议通过临时令牌机制,实现了&qu

sonadorje的专栏 1154

人像抠图 + OpenGL ES 还能这样玩?没想到吧(附带源码)

OpenGL ES 利用抠图算法实现人像留色。

字节流动 3万+

推荐开源项目:Dotted Progress Bar

推荐开源项目:Dotted Progress Bar 1、项目介绍 在移动应用开发中,一个吸引人的界面设计往往能提升用户体验。今天,我们要向您推荐的是Dotted Progress Bar,这是一款独特的进度条控件,以点状的形式展示进度,让您的应用界面更富有动态美感。 2、项目技术分析 Dotted ProgressBar基于Android平台,采用自定义可绘制对象(Drawable)或颜色来...

gitblog_00056的博客 506

Google antigravity 不支持你所在地区?手把手教你把账号改成支持地区

Google antigravity功能火爆,但国内老账号根本用不了🤬本文分享几种有效的账号国家地区切换方法,最快几分钟就能让antigravity直接亮起🔥

XiaoqiangClub的博客 2万+

C# Winform .net6自绘的圆形进度条

【代码】C# Winform .net6自绘的圆形进度条。

u013934107的博客 1723

从零开始学习PX4源码0(固件下载及编译)

本节主要记录从零开始学习PX4源码1(固件下载)的过程,欢迎批评指正!!!下载固件主要分为两个版本,之前稳定版本和最新官网发布版本,为什么要下载两个版本,主要是说明两个版本有一定的差异(开发环境及源码文件格式等),我们是从之前版本开始学习,为什么不从最新的?因为之前版本代码文件格式还是固定的,最新的变化很大,不利于初学者学习,apm和px4不好的地方就是之前版本v1.7.2和最新版本v1.14.0有些文件总是在变化,这样很不好。

陌城烟雨 4616

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【原创】WP7中使用进度条——弥补几乎所有网络上与之相关的技术博文的内容缺陷

首先要声明一点:敢把这篇技术日志名字起的这么霸气侧漏,不是我欠揍,而是实属无奈!WP7发布到现在也有3年的时间了吧!可网络上的技术博文资源啊,真心让人觉得无助。我不是一个痴迷于写技术博文的人,但是如果自己摸索出来的东西网络上没有,或者不全面,这时候我就必须要写下相关的东西了。一方面自己做个总结记录;另一方面,当然想拿出来与大家分享交流,如果你遇到了类似的问题,相信本文章可以引导你顺利走出困境!

Kunvin的专栏 1434

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

KSPhotoBrowser配置详解:背景样式、加载动画与分页控件的个性化设置

**KSPhotoBrowser**是一款优雅的iOS图片浏览器组件,以其流畅的交互体验和丰富的自定义选项而备受开发者喜爱。作为一个小而美的图片浏览器解决方案,它提供了多种背景样式、加载动画和分页控件配置,让开发者能够轻松打造个性化的图片浏览体验。本文将详细介绍如何通过KSPhotoBrowser的各种配置选项来实现完美的图片浏览界面。 ## 🎨 背景样式配置:三种视觉效果任你选择 KSPh

gitblog_00729的博客 294

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android 自定义seekbar样式及用法小结

拖动条类似进度条,不同的是用户可以控制,比如,应用程序中用户可以对音效进行控制,这就可以使用拖动条来实现。由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现SeekBar.OnSeekBarChangeListener接口。在SeekBar中需要监听3个事件,分别是:数值的改变(onProgressChanged)、开始拖动(onStartTrackingTouch)、停止拖动(on

ImKing 1319

基于HarmonyOS ArkTS API 24打铁花坊进度条使用 degBarW(item.degrees - 1300, 0.25) 计算宽度,减去 1300 的基准值后乘以 0.25 的系数

在 HarmonyOS NEXT 正式商用的背景下,ArkTS 作为鸿蒙生态的官方应用开发语言,正在从传统的命令式 UI 开发范式向声明式 UI 范式全面迁移。ArkUI 框架以组件化、声明式、状态驱动为核心特征,要求开发者以"描述 UI 应该是什么样"而非"一步步操作 UI 怎么变"的思维方式构建界面。

jin123322的博客 200

虚幻5|制作一个木桩,含血量及伤害数字

7.找到,之前创建过的玩家数据的组件,复制一个命名为敌人数据。1.打开敌人血量的UI,添加覆层,覆层要包含敌人血量成其父级。命名文本为伤害数字,并设置成变量,可以把画布画板也设置为变量。2,打开后,添加一个画布画板和进度条,命名及其调整如下。5.轨道点击添加伤害数字,选中伤害数字,添加一个变换。XY都设置,0为1,0.25为1.3,0.5为1.2。2.打开敌人数据,再打开减少生命,蓝图设置如下。二,创建敌人血量的ui,命名为敌人血量,如下。七,编辑新建的控件蓝图UI,命名为伤害数字。

djh7758258520184的博客 1140
上一篇: coding git 初始化与项目远程连接(二)
下一篇: 电子科技大学---操作系统课程实验(一)
木槿花雨
博客等级 码龄11年 20粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值