android开发基础之---------------自定义控件的使用

(3)Android常见界面控件 文章目录3.1 简单控件的使用3.1.1 TextView控件3.1.2 EditText控件3.1.3 Button控件方法一:布局文件中指定点击事件(不常用)方法二:使用内部匿名类实现点击事件方法三:使用Activity实现OnClickListener接口全部实现代码举例3.1.4 ImageView控件3.1.5 RadioButton控件设置监听事件3.1.6 CheckBox控件代码举例3.1.7 Toast类3.1.8 实战演练—实现注册界面效果创建样式放置界面控件实现注册功能示例图3.2 阅读详情

先来看一张布局图片,


这张图片的自动更新应用的item我们就可以设置成一个自定义控件,方便我们在往下重复使用。

定义自定义控件的步骤:

1.在layout文件夹下创建一个布局文件,改布局文件中包含了自定义组合控件中需要组合到一起的三个控件的布局。

2.定义一个自定义组合控件的类,用以对组合控件进行初始,设置等相关操作,方便调用者对我们的自定义控件进行一些操作。

3.在布局文件中进行使用,需要注意的地方:

3.1.引用自定义组合空间的布局文件中要设置自定义组合控件的命名空间,

3.2、全类名调用,(一会儿贴代码)

然后我们的自定义控件就可以显示在我们的布局页面上了,

在Activity中可以通过布局文件的id来获取该自定义组何控件,进而结合 自定义属性来设置自定义控件中每个控件的值。

第一步:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_margin="8sp"
    android:layout_height="wrap_content" >
    
	<TextView 
	    android:id="@+id/tv_set_title"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:textSize="20sp"
	    android:text="自动更新"
	    />
	<TextView 
	    android:id="@+id/tv_set_des"
	    android:layout_below="@id/tv_set_title"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:text="开启自动更新,仅wifi下自动更新"
	    android:focusable="false"
		android:clickable="false"
	    />

	<CheckBox
	    android:id="@+id/cb_status"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:gravity="center_vertical"
	    android:layout_alignBottom="@+id/tv_set_des"
	    android:layout_alignParentRight="true"
	    android:layout_marginRight="16dp"
	    android:focusable="false"
	    android:clickable="false"
	     />
	
	<View 
	    android:id="@+id/v_line"
	    android:layout_width="match_parent"
	    android:layout_height="0.5dp"
	    android:layout_marginTop="6sp"
	    android:layout_below="@id/cb_status"
	    android:background="#990000"
	    />

</RelativeLayout>
第二部:创建一个自定义组合控件类,继承一个布局(RelativeLayout  或者LeanerLayout等)

package com.hasee.mobilesafe.ui;

import com.hasee.mobilesafe.R;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class SettingView extends RelativeLayout {

	private TextView tv_set_title;
	private TextView tv_set_des;
	private CheckBox cb_status;
	private String des_on;
	private String des_off;

	public SettingView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}
 
	//这里使用了自定义的属性。
	public SettingView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
		//通过命名空间和属性的名称获取属性的值
		//namespace : 命名空间
		//name : 属性名称
		String namespace = "http://schemas.android.com/apk/res/com.hasee.mobilesafe";
		String title = attrs.getAttributeValue(namespace, "title");
		des_on = attrs.getAttributeValue(namespace, "des_on");
		des_off = attrs.getAttributeValue(namespace, "des_off");
		//给自定义组合控件的控件设置相应的值
				//初始化控件的值
		tv_set_title.setText(title);
		if(isChecked()){
			tv_set_des.setText(des_on);
		}else{
			tv_set_des.setText(des_off);
		}
		
	}
	
	public SettingView(Context context) {
		super(context);
		init();
	}
	public void init(){
		/**
		 * 初始化函数中:
		 * 1.填充布局文件
		 * 2.获取控件
		 */
		View.inflate(getContext(), R.layout.settingview, this);
		tv_set_title = (TextView) findViewById(R.id.tv_set_title);
		cb_status = (CheckBox) findViewById(R.id.cb_status);
		tv_set_des = (TextView) findViewById(R.id.tv_set_des);
	}
	
	/**
	 * 添加一些方法方便程序员调用的时候对该控件中的控件的值
	 */
	//设置标题信息
	public void setTitle(String title){
		tv_set_title.setText(title);
	}
	//设置描述信息
	public void setDes(String des){
		tv_set_des.setText(des);
		
	}
	//设置复选框状态   并且让复选框和TextView同步
	public void setChecked(boolean ischecked){
		cb_status.setChecked(ischecked);
		//让复选框和textView同步。
		if(ischecked){
			tv_set_des.setText(des_on);
		}else{
			tv_set_des.setText(des_off);
		}
	}
	//获取复选框状态
	public boolean isChecked(){
		return cb_status.isChecked();
	}
}
第三步:在需要使用自定义组合控件的布局文件中使用我们的组合控件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:hasee="http://schemas.android.com/apk/res/com.hasee.mobile"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    
	<TextView 
	    android:id="@+id/tv_biaoti"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:text="设置中心"
	    android:textSize="39sp"
	    android:gravity="center_horizontal"
	    android:layout_marginTop="3dp"
	    android:background="#ffff02"
	    android:padding="5dp"
	    />
	<com.hasee.<span style="font-family: Arial, Helvetica, sans-serif;">mobilesafe</span>.ui.SettingView
	    android:id="@+id/sv_setting_update"
	    android:layout_below="@+id/tv_biaoti"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    hasee:title="自动更新"
	    hasee:des_on="开启自动更新"
	    hasee:des_off="关闭自动更新"
	    ></<span style="font-family: Arial, Helvetica, sans-serif;">com.hasee.</span><span style="font-family: Arial, Helvetica, sans-serif;">mobilesafe</span><span style="font-family: Arial, Helvetica, sans-serif;">.ui.SettingView</span>>
</RelativeLayout>
这里注意命名空间和全类名调用额。

接下来在代码中对我们的自定义组合控件进行设置操作。

package com.hasee.safemaster;

import com.hasee.safemaster.ui.SettingView;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class SettingActivity extends Activity implements OnClickListener {
	private SettingView sv_setting_update;
	private SharedPreferences sp;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.setting_layout);
		sv_setting_update = (SettingView) findViewById(R.id.sv_setting_update);
		sp = getSharedPreferences("config", MODE_PRIVATE);
		init();
		sv_setting_update.setOnClickListener(this);
	}

	private void init() {
		if(sp.getBoolean("update", true)){
			sv_setting_update.setChecked(true);
			
		}else{
			sv_setting_update.setChecked(false);
		}
	}

	@Override
	public void onClick(View v) {
		Editor edit = sp.edit();
		if(sv_setting_update.ischecked()){
			edit.putBoolean("update", false);
			sv_setting_update.setDes("关闭自动更新");
			sv_setting_update.setChecked(false);
		}else{
			edit.putBoolean("update", true);
			sv_setting_update.setDes("开启自动更新");
			sv_setting_update.setChecked(true);
		}
		edit.commit();
	}
}

这里我们使用到了自定义属性,说一下自定义属性的使用吧那就,

自定义属性的创建步骤:

1.在res-->>values文件夹下创建一个名为:attrs.xml的文件,设置自己需要定义的控件属性,这里使用的是组合控件,注意引入全类名。

2.在引用自定义组合控件的布局文件中使用自定义属性。

3.在自定义组合控件类中实现初始化、获取状态、设置值和状态等方法。

4.在代码中获取自定义组合控件(根据自定义控件的id)来对自定义的属性进行值或者状态的处理。

下面用代码来具体说明:

第一步:创建attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="com.hasee.safemaster.ui.SettingView"><!--全类名-->
		        <attr name="title" format="string" /><!-- name:属性的名称,format:类型 -->
		        <attr name="des_on" format="string" />
		        <attr name="des_off" format="string" />
		    </declare-styleable>
</resources>
第二部:使用自定义属性

命名空间:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:hasee="http://schemas.android.com/apk/res/com.hasee.safemaster"


<com.hasee.safemaster.ui.SettingView
	    android:id="@+id/sv_setting_update"
	    android:layout_below="@+id/tv_biaoti"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    hasee:title="自动更新"
	    hasee:des_on="开启自动更新"
	    hasee:des_off="关闭自动更新"
	    ></com.hasee.safemaster.ui.SettingView>
第三步和第四步:上面的代码中已经声明了在自定义控件类中对自定义属性的操作。不再贴代码

自定义控件使我们不必在每个布局文件中重复很多相似的代码。很实用。。。。







安卓自定义饼状图控件实战 定制控件是根据特定需求,对现有控件进行改造或者全新创建的用户界面组件。它包括修改控件的外观和行为,或是创建全新的控件来满足特定的功能要求。定制控件可以让应用界面更加丰富和具有吸引力,同时提高用户交互体验。属性在自定义View中至关重要,它们为开发者提供了定制View外观和行为的能力。在饼状图控件中,我们可以将属性分为三大类:展示属性:影响饼状图的视觉展示,例如颜色、边框宽度。行为属性:影响用户的交互体验,例如是否显示图例、是否响应点击事件。布局属性。 阅读详情

相关推荐

Android 360度自定义摇杆控件的实现

自定义View在Android开发中是增强用户界面交互体验的关键手段。在这一章节中,我们将逐步深入了解自定义View的基本概念和创建流程。首先,我们会探讨什么是自定义View以及它在Android UI框架中的重要性。接着,我们将介绍自定义View的三种主要形式:View,ViewGroup和自定义控件,以及它们各自的应用场景。然后,我们将详细说明自定义View的生命周期,以及如何正确地覆盖和重写关键方法,比如onDrawonMeasure和onLayout。

weixin_42524864的博客 1234

android databinding 之自定义控件

1在attrs.xml中加入 <declare-styleable name="MultiProgressBar"> <attr name="progress" format="integer"/> </declare-styleable> 2修改构造函数,加入如下代码 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiProgressBar...

easyboot的专栏 1040

Android-AACustomFont利用Databinding来实现自定义字体功能

AACustomFont 利用 Databinding 来实现自定义字体功能

使用DataBinding自定义控件

【代码】使用DataBinding自定义控件。

唐诺 229

利用 Databinding 来实现自定义字体功能,这个可以有.zip

利用 Databinding 来实现自定义字体功能,这个可以有。.zip,aacustomfont是一个轻量级的xml自定义字体活页夹,直接位于textview、button、edittext、radiobutton、checkbox标记中。该库旨在避免XML中自定义字体的自定义视图,并尽量减少用于设置每个视图的字体的Java代码。

DatabindingMVVM

Databinding实现xml的绑定,去除id的绑定操作。将自定义控件很方便的全局注入xml,比如xml中的head。并实现对应逻辑的统一注入,比如点击返回销毁当前页面。另外提供全局点击事件的单点操作,防止过快点击产生多次打开同一个页面的情况产生。

Databinding的使用(自定义控件的全局注入、布局绑定)

一、Databinding使用的优势 1.1,实现xml的绑定,去除id的绑定操作; 1.2,将自定义控件很方便的全局注入xml,比如xml中的head。并实现对应逻辑的统一注入,比如点击返回销毁当前页面; 1.3,另外提供全局点击事件的单点操作,防止过快点击产生多次打开同一个页面的情况产生。 二、使用方法 2.1,在需要用的module中配置   android { ......

流星雨的博客 8710

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.youkuaiyun.com/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1122

Android DataBinding (五) 自定义 View 的双向绑定

前言自定义 View 的时候如果用到非系统定义的属性的时候,如果要实现双向绑定,不是用了 @= 就行的,自定义 View 中还需要一些设置。下面通过一个例子来说明自定义 View 的双向绑定的实现。例子要求: 1. 通过 RadioButton 来选择爱好(爱好的选项是:吃饭 / 睡觉 / 打豆豆) 2. 画面加载的时候显示初始的爱好值(将 ViewModel 里设好的值传到 RadioButt

teletian的专栏 1万+

[NVME] CMBLOC-Controller Memory Buffer Location

CMBLOC-Controller Memory Buffer Location

jinyuya的博客 988

SAP交货单过账避坑指南:序列号处理、Buffer清理与BAPI提交回滚的那些事儿

本文深入解析SAP交货单过账中的序列号处理、Buffer清理与BAPI提交回滚等关键问题,提供WS_DELIVERY_UPDATE和BAPI_OUTB_DELIVERY_CONFIRM_DEC的实战优化方案。通过详细的技术分析和最佳实践,帮助开发者避免常见陷阱,提升交货单处理的稳定性和效率。

weixin_31155097的博客 431

Android开发学习基础4.2--自定义控件和ListView的使用

Android开发学习基础4.2 自定义控件和ListView的使用 借助导图的形式,记录学习的经过。没有详细的过程,若想了解,可以阅读《第一行代码(第三版)》这本书的第四章 文章目录Android开发学习基础4.2 自定义控件和ListView的使用导图效果图 导图 效果图 ...

晨曦默涵 1753

2025东方财富笔试考什么?cata能力测评攻略|答题技巧真题分享

4月10日-4月20日 专业笔试(行测+金融知识混合双打) 4月25日-5月10日 面试车轮战(AI面+半结构化+压力面) 5月15日起 Offer发放(谈薪必杀技:对标同花顺/雪球)这里不仅是金融极客的乐园,更是**“年薪30万管培生计划”**的主战场——你将用代码重构K线,用算法预判市场,成为资本市场的“数字先知”。东方财富,中国金融信息服务领域的“隐形冠军”,以**“金融数据+互联网”双擎驱动**,打造了覆盖证券、基金、期货的全生态交易平台。:• “我总坚持自己的方案”(HR:团队毒药!

Dgntsj的博客 3259

Android自定义控件开发入门与实战(1)绘图基础,使用指南

第一个构造函数通过其他Region来复制一个同样的Region变量。 第二、三个构造函数才是常用的,根据一个矩形或者矩形左上角and右下角来构造出一个矩形区域。 我们在View中构造一个Region, 例: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); paint.setColor(Color

m0_64604311的博客 204

【使用DeepSeek辅助Python接口性能自动化测试教程-实战教程】

访问DeepSeek官方网站,注册账号并获取API Key。此Key是调用DeepSeek API的必要凭证,务必妥善保管。安装时,注意勾选“Add Python to PATH”选项,以便系统能识别Python命令。确保你已安装Python 3.8或更高版本。会自动发现并执行所有以。

Dreams°的博客 2466

【即插即用模块】Transformer篇 | ICCV 2025 | MALA :注意力分布神似Softmax,告别线性注意力性能短板!

MALA(Magnitude-Aware Linear Attention)是一种改进的线性注意力机制,通过引入缩放因子和偏移项,解决了传统线性注意力忽视查询幅度的问题,使其分布更接近Softmax Attention。该模块具有线性复杂度(O(n)),结合RoPE和LEPE编码实现全局-局部位置信息混合,通过z值调制平衡信息权重。实验表明MALA在轻量级视觉任务中能有效平衡效率与精度,注意力可视化显示其分布与Softmax Attention高度相似。代码提供完整的RoPE位置编码和线性注意力

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1106

android 仿QQ手机版

千人2群开启,欢迎大家围观打酱油,群号145667827     您当前位置 : JavaApk-安卓应用游戏源码服务专家 » QQ » Android项目源码界面超级华丽的仿QQ最新版本 Android项目源码界面超级华丽的仿QQ最新版本 05 2014.05 作者:JavaApk   发布:2014-05-05 12:40 ...

weixin_34399060的博客 177

史上最全工商银行核心系统建设历程:从“数据集中”到“ECOS”2.0,见证银行业信息科技跨时代发展征程

ECOS工程的直接成果是建成了工商银行第五代信息系统,即从单一核心银行系统到去核心化开放生态系统,率先开启了以智能化、开放化为特征,数据驱动引领经营模式变革,创新提出了一整套国际领先的分布式开放生态银行系统建设方案,在大型银行全分布式系统架构、主机下移、银行系统生态化转型、大规模交易型分布式数据库等多个领域再次实现“0到1”的突破,建成了具备国际领先水平的全分布式开放生态银行系统,继续勇立数字化转型潮头,推动高质量发展再上新台阶。工商银行的业务连续性管理水平实现了跨越式发展,有力地保障了业务发展。

银行信息系统应用架构详解 824

Android知识体系总结2020之Android部分控件篇

初级 1.基础布局 线性布局(LinearLayout) 相对布局(RelativeLayout) 约束布局(ConstraintLayout) 网格布局(GridLayout) 表格布局(TableLayout) 帧布局(FrameLayout) 绝对布局(AbsoluteLayout)(过时) RTL从右到左的布局 CoordinatorLayout 2.基础控件   基础控件就不用笔者...

编程语言是方式,而思维是创造。 3373

Python实战日志_P4_图书馆Web API服务

目标:使用Flask将图书馆系统升级为RESTful API服务,掌握Web开发基础难度:⭐⭐⭐⭐☆预计学习时间:75分钟前置要求:已完成第3篇《个人图书馆管理系统》

qq_39436086的博客 83

深度学习工具包 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")

开发Android自定义控件的方法

接下来,我们可以为我们的自定义控件添加一些自定义属性,以便在XML布局文件中使用。我们可以通过在目录下创建一个新的attrs.xml文件来定义这些属性。

baidu_33393680的博客 443

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android UI进阶之自定义组合控件

好久没写博客了。实在是忙不过来,不过再不总结总结真的不行了。慢慢来吧,有好多需要去总结的,博客里还是记录ui方面的。 今天和大家分享下组合控件的使用。很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当

notice501的专栏 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 控件自定义属性,Android自定义控件属性

在项目开发的过程中,有一个线性布局在很多地方都使用到了,但是其中的内容又有不同之处,如果每次都写一个布局会产生很多重复多余的代码,使用include包含代码也考虑过,但是也有一些局限性,因此,最后使用了自定义布局。先来看下实际的效果图 下面就来详细说下整个过程。先来看下基础的线性布局:线性布局左边是一个ImageView 然后是一个textView 然后是一个textview 一个image...

weixin_29196613的博客 638

Android自定义控件(一)---基础篇

谈到 Android自定义控件 ,这是一个令人渴望又害怕的领域,是作为一个Android开发人员的必经之路。 鄙人也是一名初学者,怀着一颗分享的心,将自己所理解的知识点与君分享,不足之处望纠正 哈哈哈,说的有点多了,下面直入正题吧! 一、自定义控件预备知识点 ①构造方法 package com.example.mytextview; //import javax.swing.text.View; 这里别到错了包,这个包是错误的 import android.content.Context;

我想月薪过万的博客 738

开源 java android app 开发(十三)自定义绘图控件--游戏摇杆

摘要:本文记录了嵌入式开发者临时转战Android应用开发的经历,重点讲解了如何通过Java自定义摇杆控件。文章详细阐述了使用Canvas和Paint类进行绘图的基础知识,并完整展示了摇杆控件的实现过程,包括:1)继承View类创建自定义控件;2)处理触摸事件实现拖动效果;3)添加属性文件支持XML参数配置;4)设计回调接口供外部使用。该摇杆控件可用于机器人/无人机控制等场景,文中还提供了完整的代码实现和效果展示。作为系列教程的第13篇,本文帮助开发者快速掌握Android自定义控件的开发技巧。

ajassi2000的博客 1024
上一篇: Android开发基础之-----------补间动画
下一篇: android的开发基础之--------创建广播接收者的两种方式
杨鑫校
博客等级 码龄11年 24粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值