打开思维的枷锁:选项卡切换、手势识别动作ViewFlipper的一个案例分析

TabHost + ViewFlipper实现滑动翻页、切换tab动画效果 历史最牛、绝对原创、代码简洁、功能强大,华丽的使用TabHost与ViewFlipper结合实现滑动翻页效果,支持tab背景图片自动切换.之前看到别人写的实现方法是重写TabHost,但是代码太繁琐。本程序虽然资源分高点儿,但绝对物超所值,下载了如有问题请站内联系。 立即下载


1.案例图片展示:

2.案例功能扫描:
   1.ViewFlipper的页面切换功能,包括添加手势识别左右滑动切换,同时联动点击顶部选项卡切换;
   2.动态组合RadioGroup与ViewFlipper实现选项卡Tab与content联动;
   3.利用RadioButton实现顶部选项卡;
   4.动画Animation的定义及实现,包括xml方式和java代码;
   5.GestureDetector手势识别应用;

3.案例所需基本功:
   1.ViewFlipper控件的使用、
   2.RadioGroup控件应用、
   3.在代码中定义控件、
   4.事件监听机制(onClickListener/OnTouchListener)、
   5.Animation的使用(包含xml定义与java代码定义)、
   6.GestureDetector的使用。


4.案例图片素材:一张整幅图片背景图片、一张RadioButton未选中时的图片,一张选中时的图片(格式为.9.png),一张RadioButton中间间隔的图片。

5.案例实现分析:

   第一步:准备三个LayoutView,作为ViewFlipper的子View;

   第二步:实现ViewFlipper这个主View的功能;
       1.设计选项卡,通过RadioGroup与RadioButton来实现,需要学会如何在java中定义View的控件,包括设置LayoutParams参数与设置View控件属性;
       2.实现ViewFlipper控件,并将三个LayoutView作为它的子View加进去;
       3.给RadioGroup添加点击事件监控setOnCheckedChangeListener(),通过得到的RadioButton id来控制RadioButton点击状态显 示与ViewFlipper对应的 LayoutView显示;
       4.给ViewFlipper添加左右移动动画Animation;
       5.给ViewFlipper添加手势识别监听器,并设计其左右移动动画。

   第三步:在Activity里面通过setContentView()方法将这个主View加进去。

6.案例代码实现:
作为内容View的类LayoutFirst
package com.javaee.main.layout;

import android.content.Context;
import android.view.Gravity;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class LayoutFirst extends RelativeLayout{

	public LayoutFirst(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		initLayout(context);
	}

	private void initLayout(Context context){
		LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
		TextView tv = new TextView(context);
		tv.setText("LayoutA");
		tv.setTextSize(28.0f);
		tv.setGravity(Gravity.CENTER);
		this.addView(tv, params);
	}
}
类LayoutSecond:
package com.javaee.main.layout;

import android.content.Context;
import android.view.Gravity;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class LayoutSecond extends RelativeLayout{

	public LayoutSecond(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		initLayout(context);
	}
	
	private void initLayout(Context context){
		LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
		TextView tv = new TextView(context);
		tv.setText("LayoutB");
		tv.setTextSize(28.0f);
		tv.setGravity(Gravity.CENTER);
		this.addView(tv, params);
	}

}
类LayoutThird
package com.javaee.main.layout;

import android.content.Context;
import android.view.Gravity;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class LayoutThird extends RelativeLayout{

	public LayoutThird(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		initLayout(context);
	}

	private void initLayout(Context context){
		LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
		TextView tv = new TextView(context);
		tv.setText("LayoutC");
		tv.setTextSize(28.0f);
		tv.setGravity(Gravity.CENTER);
		this.addView(tv, params);
	}
}
辅助动画类AnimationHelper
package com.javaee.main.anim;

import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;

public class AnimationHelper {

	// 从右边出来滑动效果
	public static Animation inFromRight() {
		Animation inFRight = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, +1.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f);
		inFRight.setDuration(500);
		inFRight.setInterpolator(new AccelerateInterpolator());
		return inFRight;
	}

	// 从左边出来滑动效果
	public static Animation inFromLeft() {
		Animation inFLeft = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, -1.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f);
		inFLeft.setDuration(500);
		inFLeft.setInterpolator(new AccelerateInterpolator());
		return inFLeft;
	}

	// 从左边出去效果
	public static Animation outToLeft() {
		Animation outToLeft = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, -1.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f);
		outToLeft.setDuration(500);
		outToLeft.setInterpolator(new AccelerateInterpolator());
		return outToLeft;
	}

	// 从右边出去
	public static Animation outToRight() {
		Animation outTRight = new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, 1.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f,
				Animation.RELATIVE_TO_PARENT, 0.0f);
		outTRight.setDuration(500);
		outTRight.setInterpolator(new AccelerateInterpolator());
		return outTRight;
	}

}
主界面类MyViewFlipper
package com.javaee.main.mainView;

import com.javaee.main.R;
import com.javaee.main.anim.AnimationHelper;
import com.javaee.main.layout.LayoutFirst;
import com.javaee.main.layout.LayoutSecond;
import com.javaee.main.layout.LayoutThird;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.ViewFlipper;

public class MyViewFlipper extends RelativeLayout {
	private final static int ID_RADIO_GROUP = 0X0005;
	private final static int ID_RADIO_BUTTON1 = 0X0008;
	private final static int ID_RADIO_BUTTON2 = 0X0007;
	private final static int ID_RADIO_BUTTON3 = 0X0006;

	private RadioGroup rGroup;
	private RadioButton bn_1;
	private RadioButton bn_2;
	private RadioButton bn_3;
	private ViewFlipper flipper;
	
	private LayoutFirst first;
	private LayoutSecond second;
	private LayoutThird third;

	public MyViewFlipper(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		initLayout(context);
	}

	// 初始化Layout
	private void initLayout(final Context context) {
		Bitmap bmnull = null;
		// 设置View的背景
		BitmapDrawable mDraw = new BitmapDrawable(getResources(),
				BitmapFactory.decodeResource(getResources(),
						R.drawable.browse_bg_tile));
		mDraw.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
		this.setBackgroundDrawable(mDraw);
		
		//创建RadioGroup
		rGroup = new RadioGroup(context);
		rGroup.setOrientation(CENTER_HORIZONTAL);
		rGroup.setGravity(Gravity.CENTER_HORIZONTAL);
		rGroup.setId(ID_RADIO_GROUP);
		//创建RadioGroup的layout参数
		LayoutParams gourpLParams = new LayoutParams(LayoutParams.FILL_PARENT, 55);
		gourpLParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
		this.addView(rGroup, gourpLParams);
		//给RadioGroup添加监听器
		rGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				// TODO Auto-generated method stub
				checkedChange(checkedId);
			}
		});
		
		//创建RadioButton
		bn_1 = new RadioButton(context);
		bn_1.setId(ID_RADIO_BUTTON1);
		bn_1.setBackgroundResource(R.drawable.nav_inactive_tile);
		bn_1.setButtonDrawable(new BitmapDrawable(bmnull));
		bn_1.setText("Tab1");
		bn_1.setTextColor(0xff839359);
		bn_1.getPaint().setFakeBoldText(true);
		bn_1.setGravity(Gravity.CENTER);
		RadioGroup.LayoutParams buttonParams = new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
		buttonParams.weight = 1;
		rGroup.addView(bn_1, buttonParams);
		
		//创建中间间隔ImageView
		ImageView imageView = new ImageView(context);
		imageView.setBackgroundResource(R.drawable.nav_divider);
		buttonParams = new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		rGroup.addView(imageView, buttonParams);
		
		//创建第二个RadioButton
		bn_2 = new RadioButton(context);
		bn_2.setId(ID_RADIO_BUTTON2);
		bn_2.setBackgroundResource(R.drawable.nav_inactive_tile);
		bn_2.setButtonDrawable(new BitmapDrawable(bmnull));
		bn_2.setText("Tab2");
		bn_2.setTextColor(0xff839359);
		bn_2.getPaint().setFakeBoldText(true);
		bn_2.setGravity(Gravity.CENTER);
		buttonParams = new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
		buttonParams.weight = 1;
		rGroup.addView(bn_2, buttonParams);
		
		//中间间隔view
		imageView = new ImageView(context);
		imageView.setBackgroundResource(R.drawable.nav_divider);
		buttonParams = new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		rGroup.addView(imageView, buttonParams);
		
		//第三个RadioButton
		bn_3 = new RadioButton(context);
		bn_3.setId(ID_RADIO_BUTTON3);
		bn_3.setBackgroundResource(R.drawable.nav_inactive_tile);
		bn_3.setButtonDrawable(new BitmapDrawable(bmnull));
		bn_3.setText("Tab3");
		bn_3.setTextColor(0xff839359);
		bn_3.getPaint().setFakeBoldText(true);
		bn_3.setGravity(Gravity.CENTER);
		buttonParams = new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
		buttonParams.weight = 1;
		rGroup.addView(bn_3, buttonParams);
		
		//创建flipper对象
		flipper = new ViewFlipper(context);
		flipper.setInAnimation(AnimationUtils.loadAnimation(context, R.anim.in_to_left));
		flipper.setOutAnimation(AnimationUtils.loadAnimation(context, R.anim.out_to_left));
		flipper.setOnTouchListener(mOnTouchListener);
		flipper.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);
		flipper.setFlipInterval(1000);
		flipper.setClickable(true);
		gourpLParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT);
		gourpLParams.addRule(RelativeLayout.BELOW, ID_RADIO_GROUP);
		this.addView(flipper, gourpLParams);
		
		first = new LayoutFirst(context);
		second = new LayoutSecond(context);
		third = new LayoutThird(context);
		gourpLParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
		flipper.addView(first, gourpLParams);
		flipper.addView(second, gourpLParams);
		flipper.addView(third, gourpLParams);
		
	}
	
	private OnTouchListener mOnTouchListener = new OnTouchListener(){

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
			return mGestureDetector.onTouchEvent(event);
		}
		
	};
	
	GestureDetector mGestureDetector = new GestureDetector(new OnGestureListener() {
		
		@Override
		public boolean onSingleTapUp(MotionEvent e) {
			// TODO Auto-generated method stub
			return false;
		}
		
		@Override
		public void onShowPress(MotionEvent e) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
				float distanceY) {
			// TODO Auto-generated method stub
			return false;
		}
		
		@Override
		public void onLongPress(MotionEvent e) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			// TODO Auto-generated method stub
			if(velocityX > 0){
				System.out.println("左边-velocityX:" + velocityX);
				rightNext();
			} else {
				System.out.println("右边-velocityX:" + velocityX);
				leftNext();
			}
			return false;
		}
		
		@Override
		public boolean onDown(MotionEvent e) {
			// TODO Auto-generated method stub
			return false;
		}
	});
	
	private void checkedChange(int id){
		switch (id) {
		case 0:
		case ID_RADIO_BUTTON1:
			flipper.setDisplayedChild(0);
			bn_1.setBackgroundResource(R.drawable.nav_active_2options);
			bn_2.setBackgroundResource(R.drawable.nav_inactive_tile);
			bn_3.setBackgroundResource(R.drawable.nav_inactive_tile);
			break;
		case 1:
		case ID_RADIO_BUTTON2:
			flipper.setDisplayedChild(1);
			bn_1.setBackgroundResource(R.drawable.nav_inactive_tile);
			bn_2.setBackgroundResource(R.drawable.nav_active_2options);
			bn_3.setBackgroundResource(R.drawable.nav_inactive_tile);
			break;
		case 2:
		case ID_RADIO_BUTTON3:
			flipper.setDisplayedChild(2);
			bn_1.setBackgroundResource(R.drawable.nav_inactive_tile);
			bn_2.setBackgroundResource(R.drawable.nav_inactive_tile);
			bn_3.setBackgroundResource(R.drawable.nav_active_2options);
			break;
		}
	}
	
	private void leftNext(){
		flipper.setInAnimation(AnimationHelper.inFromRight());
		flipper.setOutAnimation(AnimationHelper.outToLeft());
		flipper.showNext();
		checkedChange(flipper.getDisplayedChild());
	}
	
	private void rightNext(){
		flipper.setInAnimation(AnimationHelper.inFromLeft());
		flipper.setOutAnimation(AnimationHelper.outToRight());
		flipper.showPrevious();
		checkedChange(flipper.getDisplayedChild());
	}
	
	
	
}
Activity启动类MainActivity
package com.javaee.main;

import com.javaee.main.mainView.MyViewFlipper;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        MyViewFlipper flipper = new MyViewFlipper(this);
        setContentView(flipper);
    }
}


2025 居民消费结构数据集(21列,15000条记录)XLSX 详情介绍:该数据集为 2025 年 12 个月、1250 户家庭的平衡面板消费数据,15000 行 ×21 列零缺失,覆盖 31 省、城乡均衡,含八大类消费支出和恩格尔系数(均值 0.293,属富裕区间),家庭月收入均值 8473 元、月支出 6487 元,附完整字段说明 sheet,数据干净规整,非常适合做消费结构分析、面板回归、城乡 / 区域差异对比和收入等级分类预测,但为合成数据、仅 1 年时间跨度,不适合做真实政策研究或长期趋势分析。 立即下载

相关推荐

配合上述本地模型资源文件

配合上述本地模型资源文件

android 静态图片自动切换,Android-ViewFlipper(图片轮播 和 手势控制 实例)

1.回顾上篇 学习了 ViewPager 的 使用的三种方式,分别通过 PagerAdapter , FragmentPagerAdapter 和 FragmentStatePagerAdapter2. 重点(1)ViewFlipper(2)图片轮播 (自动)(3)手势控制(4)OnTouchListener3.ViewFliper3.1 介绍多页面管理控件,实现子页面自动切换3.2 添加View...

weixin_32808905的博客 445

三电平维也纳VIENNA双闭环控制整流器仿真(Simulink仿真实现)

内容概要:本文档系统性地介绍了以“三电平维也纳VIENNA双闭环控制整流器”为核心的电力电子系统Simulink仿真资源,聚焦于电压电流双闭环控制、中点电位平衡、空间矢量脉宽调制(SVPWM)等关键技术的建模与实现。资源包不仅提供完整的仿真模型,还配套Mathcad计算书、设计报告及参考文献,帮助用户从理论推导到参数设计再到仿真验证实现全流程贯通。同时,文档整合了大量相关拓扑(如DAB、LLC、PFC、CLLC等)与先进控制策略(如EPS调制、软开关、最小应力优化、模型预测控制等)的仿真案例,覆盖从基础整流器到复杂双向变换系统的多个典型应用场景,构成一个面向科研、教学与工程实践的综合性学习体系。; 适合人群:具备电力电子、自动控制或电气工程等相关专业背景,熟悉MATLAB/Simulink仿真环境,正在从事新能源变换、电能质量治理、电机驱动或电力系统方向研究的研究生、高校教师及企业研发工程师。; 使用场景及目标:①开展三电平VIENNA整流器、双有源桥DAB、LLC谐振变换器等先进拓扑的科研建模与论文复现;②完成课程设计、毕业设计或实际工程项目中的控制器开发与系统性能验证;③深入掌握双闭环控制架构、中点电位平衡机制、SVPWM调制策略及系统稳定性分析等核心知识点; 阅读建议:建议结合Mathcad计算书进行系统参数设计,理解控制算法的数学基础,并在Simulink中逐步搭建与调试模型,注重理论计算与仿真结果的对比分析,推荐按照资源目录顺序循序渐进学习,以建立完整的知识框架和技术实现能力。

Android手势识别GestureDetector详解

一、概述当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,但是这个方法太过简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦(因为我们要自己根据用户触摸的...

zhangyalong_android的博客 1万+

zynq 7010/020 AMP双核通信-Vitis2023/2024

在platform cpu1设置中添加;注意value中使用空格分开程序思路:比较简单。

weixin_43310175的博客 917

Windows 11 上 WSL2 安装 Ubuntu 22.04 保姆级教程(含桌面环境配置)

本文提供在Windows 11上通过WSL2安装Ubuntu 22.04并配置桌面环境的详细教程。涵盖WSL2核心安装、性能调优、Xfce桌面环境部署以及开发环境集成,帮助开发者构建高效、无缝的Windows-Linux混合开发工作站。

Jerry的专栏 633

android:listView学习记录1

listView垂直列表显示组件,创建的方式有两种: 第一种:直接使用ListView进行创建; 第二种:让Activity继承ListActivity创建。 与listView其他相关的基本元素有:数据集、适配器。它们三者关系是典型的MVC模型应用。 几种重要的属性: android:entries:制定一个数组资源,android将根据这个数组资源生成listView; a

张峥(Java) 7670

伪距单点定位推导+DOP值分析(附matlab仿真代码)

伪距单点定位公式推导、DOP值分析与matlab仿真分析

shannanshouyin的博客 2513

android:edittext学习记录

实现在EditText中输入自定义表情,需要将放在drawable中的表情图片,嵌入到EditText中,这里利用ImageSpan实现该功能。 第一步:利用反射机制,得到图片资源的ID,生成图片bitmap对象 Field field = R.drawable.class.getDeclaredField("image" + random); int resouceId = Integer

张峥(Java) 7336

OBS技术深度剖析:从开源直播工具到专业制作引擎的进化之路

本文深入剖析了开源直播软件OBS的技术架构与发展历程。从2012年诞生至今,OBS已成长为直播领域的事实标准,其成功源于模块化设计和开源协作模式。文章详细解析了OBS的核心技术:1) 分层架构与插件系统,2) GPU加速的渲染管线,3) 智能音频处理,4) 多平台编码优化。同时探讨了虚拟摄像头、浏览器源等高级功能的实现原理,并提供了性能优化方案和硬件配置建议。随着AI、WebRTC等新技术发展,OBS将持续引领实时内容创作工具的创新,为开发者和创作者提供更强大的技术支持。

程序猿老樊的博客 326

国科大学习资料--高级软件工程-复习题选择题答案

国科大学习资料–高级软件工程(罗铁坚 魏峻 刘丹)-复习题选择题答案 ’‘

无名何许人的博客 1165

android:autoCompleteTextView学习记录

autoCompleteTextView继承于EditText,它用来自动提示与用户输入相关的关键字内容,以下拉列表项出现在编辑框的下面。 //设置下拉框提示的文字 android:completionHint="选择你喜欢的图书" //设置用户输入几个字符时显示弹出提示框 android:completionThreshold="2" //设置提示框与输入框的水平偏差 android

张峥(Java) 3614

STM32CubeMX | 38-使用硬件SPI驱动以太网模块(W5500)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与以W5500通信,驱动以太网模块。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): W5500以太网模块 这里我使用常见的以太网模块W5500: W5500官网 http://www.w5500.cn/ W5500中文手册 iEthernet W5500 Datasheet 软件准备 需要安装好Keil - MDK及芯片对应的包,以

Mculover666的博客(嵌入式) 7388

android:tabHost学习记录

一、TabHost可以很方便的在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆放区域。TabHost仅仅是一个简单的容器,它提供了如下两个方法创建选项卡、添加选项卡: -->newTabSpec(String tag):创建选项卡 -->addTab(TabHost.TabSpec tabSpec):添加选项卡 使用TabHost的一般步骤: 1.在界面布局中定

张峥(Java) 2921

★教程3:Simulink学习教程入门60例目录

1.订阅本教程用户可以免费获得本博任意1个(包括所有免费专栏和付费专栏)博文对应代码;2.本Simulink课程的所有案例(部分理论知识点除外)均由博主编写而成,供有兴趣的朋友们自己订阅学习使用。未经本人允许,禁止任何形式的商业用途;3.本课程除了介绍常见的Simulink模块介绍之外,我们更侧重于各种实例的完整设计介绍。从通信,控制器,图像处理,语音处理,电力系统等诸多常用领域介绍了相关案例,如果对于某个较为复杂的案例,初学者无法正确复现,也可以私信博主获得完整Simulink模型文件。

FPGA/MATLAB学习教程/源码/项目合作开发 1万+

【数字孪生与仿真技术】05:从原理到实战:MATLAB/Simulink在航空航天GNC系统开发中的深度解析(含全流程代码与认证指南)

摘要:本文系统阐述MATLAB/Simulink在航空航天制导、导航与控制(GNC)系统开发中的核心应用。通过解析GNC系统高保真动力学建模、多源导航传感器融合、鲁棒控制算法设计等关键技术原理,结合Virgin Orbit运载火箭、CubeSat等真实案例,展示从需求分析、模型搭建、仿真验证到代码生成与认证的完整开发流程。文中提供1200余行关键代码、8个可复用Simulink模型及详细执行结果展示,涵盖DO-178C认证支持、实时性能优化等工业级开发规范,为航空航天工程师、科研人员提供可落地的参考方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1656

android:textview学习记录

这次扫盲运动的对象是UI中最基本控件textview; 扫盲突破方向是textview基本属性、textview文本内容、textview事件触发: 其中textview基本属性包括:布局控制(布局向外与布局向内)属性、显示控制(组件控制与文本控制)属性; 其中textview文本内容包括:文本嵌入形式(文本string与html)、文本内容识别(识别text的特殊链接与识别html网页链接

张峥(Java) 1914

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android:绘制view过程学习记录

View的getWidth和getHeight,getMeasuredWidth和getMeasuredHeight是在view放到layout中显示的时候才能获得正确的值的,但是往往我们需要在它显示之前就知道它的大小是多少,宽高是多少。怎么实现呢?我们需要预估View的宽高。 其实在View显示出来之后再获取它的宽高时能正确的得到它的大小,android绘制view的过程简单描述可以解释为:

张峥(Java) 1675

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android:imageview学习记录

ImageView.getDrawable为空?    设置完iv.setImageResource(R.drawable.l)后,也要用getResources().getDrawable(R.drawable.l),而不是iv.getDrawable()。    你调用了getDrawable(R.drawable.l)两次,将会获得俩个不同的对象,因为这样会获取俩个新的ImageDraw

张峥(Java) 1362

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android:scrollView学习记录

scrollView滚动条是由FrameLayout派生出来的,用于为普通组件添加滚动条的组件,scrollView里面最多只能包含一个组件。scrollView是给组件添加垂直滚动条,horizontalScrollView是给组件添加水平滚动条。 <ScrollView xmlns:android="http://schemas.android.com/apk/res/androi

张峥(Java) 1326

android:listView学习记录2

1、listView的两个属性 ListView.setChoiceModel:设置ListView回应用户响应点击的方式; ListVeiw.setTextFilterEnable(true):激活过滤功能,用户可以在软键盘上输入文字,ListView可以自动匹配用户输入的文字。 2、效果实现 第一、listView 第二、一个listView列表里面水平布置了一个imageV

张峥(Java) 1277

android:spinner学习记录

自定义spinner下拉选择框样式,通过添加BaseAdapter实现,但是在匿名内部类创建BaseAdapter的时候,获取样式spinner.xml里面textview对象时出现如下错误: java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams 贴代码: LayoutInflater inflayer

张峥(Java) 925

android:datePicker与timePicker学习记录

datePicker控件通过添加监听器onDateChangedListener()来监听datePicker的年月日的改变,timePick控件通过监听器onTimeChangerListener()来监听tiemPicker的年月日的改变。 如何获取时间: Calendar c = Calendar.getInstance();         year = c.get(Calendar

张峥(Java) 789
上一篇: android:绘制view过程学习记录
extjavaee
博客等级 码龄16年 7粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值