Android仿微信头部下拉菜单

模仿 微信8.0下拉出现小程序 - 二楼页面 先放上今天思路的实现效果图(ViewPager2): 仅测试 二楼效果,头部三个圆点的动画我之前实现过,今天这个还没加入。 之前也试过其他方法,比如用帧布局放两个待加载的 Fragment ,如果有某个Fragment被覆盖,就直接隐藏布局。然后通过 scrollTo() 或者 layout() 方法重摆 Fragment 的位置,产生拖动的效果。但是实现效果并不理想。今天偶然得到灵感:我能不能用 ViewPager2 去实现呢? 这个效果做的也比较匆忙,... 阅读详情

1、新建一个类BasePopupWindow,继承PopupWindow,重写其几个方法

public abstract class BasePopupWindow extends PopupWindow {

	protected View mContentView;
        public BasePopupWindow(){
               super();
        }
       
        public BasePopupWindow(Context context, AttributeSet attrs, int defStyle){
              super(context, attrs, defStyle);
        }
       
       public BasePopupWindow(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public BasePopupWindow(Context context) {
		super(context);
	}

	public BasePopupWindow(int width, int height) {
		super(width, height);
	}

	public BasePopupWindow(View contentView, int width, int height,
			boolean focusable) {
		super(contentView, width, height, focusable);
	}

	public BasePopupWindow(View contentView) {
		super(contentView);
	}

       public BasePopupWindow(View contentView, int width, int height){
             super(contentView, width, height, true);
             mContentView = contentView;
             setFocusable(true);
             setOutsideTouchable(true);
        //  setAnimationStyle(R.style.Popup_Animation_Alpha);
             setBackgroundDrawable(new ColorDrawable());
             setTouchable(true);
       
             initViews();
             initEvents();
     }

     public abstract void initViews();

     public abstract void initEvents();

     public View findViewById(int id) {
		return mContentView.findViewById(id);
	}
}

2、再创建一个类继承BasePopupWindow,把你所需求的下拉菜单布局xml定义好后,设置在该类里,并把可控件初始化、设置监听事件等。

  下拉菜单布局 popup_windown_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:background="@drawable/main_navigation_background"
    android:orientation="vertical"
    android:baselineAligned="false"
    android:padding="15dp" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/menu1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_collects"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="我的收藏"
            android:textColor="#ffffff" />
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:background="#2f4f4f" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
        android:id="@+id/menu2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_orders"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="我的订单"
            android:textColor="#ffffff" />
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:background="#2f4f4f" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
        android:id="@+id/menu3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_account_safe"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="修改密码"
            android:textColor="#ffffff" />
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:background="#2f4f4f" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/menu4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:drawableLeft="@drawable/android_my_jd_messages"
            android:drawablePadding="5dp"
            android:gravity="center"
            android:text="我的资料"
            android:textColor="#ffffff" />

    </LinearLayout>

</LinearLayout>

MyMenuPopupWindow类:

public class MyMenuPopupWindow extends BasePopupWindow implements
		OnClickListener {
	/** popupmenu 中的各个item */
	private Button menu1;
	private Button menu2;
	private Button menu3;
	private Button menu4;

	private onPopupMenuItemClickListener mOnPopupMenuItemClickListener;

	/**
	 * 设置自定义的popupmenu布局
	 */
	public MyMenuPopupWindow(Context context, int width, int height) {
		super(LayoutInflater.from(context).inflate(R.layout.popup_windown_menu,
				null), width, height);
	}

	@Override
	public void initViews() {
		menu1 = (Button) findViewById(R.id.menu1);
		menu2 = (Button) findViewById(R.id.menu2);
		menu3 = (Button) findViewById(R.id.menu3);
		menu4 = (Button) findViewById(R.id.menu4);
	}

	@Override
	public void initEvents() {
		menu1.setOnClickListener(this);
		menu2.setOnClickListener(this);
		menu3.setOnClickListener(this);
		menu4.setOnClickListener(this);
	}

	@Override
	public void init() {

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.menu1:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyFavoritesButtunClick();
			}
			break;
		case R.id.menu2:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyOrderButtunClick();
			}
			break;
		case R.id.menu3:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyresetPasswdButtunClick();
			}
			break;
		case R.id.menu4:
			if (mOnPopupMenuItemClickListener != null) {
				mOnPopupMenuItemClickListener.onMyInfosButtunClick();
			}
			break;
		}
		dismiss();
	}

	public void setOnPopupMenuItemClickListener(
			onPopupMenuItemClickListener listener) {
		mOnPopupMenuItemClickListener = listener;
	}

	public interface onPopupMenuItemClickListener {
		void onMyFavoritesButtunClick();

		void onMyOrderButtunClick();

		void onMyresetPasswdButtunClick();

		void onMyInfosButtunClick();
	}

}



3、在需要设置下拉菜单的界面把MyMenuPopupWindow

    getStatusBarHeight 是获取手机状态栏高度


<pre name="code" class="html">public class PopupActivity extends Activity implements onPopupMenuItemClickListener {
        private MyMenuPopupWindow mPopupMenu  = null;
	private RelativeLayout top_layout = null;
        private Button more_button;

        @Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
                more_button = (Button) findViewById(R.id.more_button);
		
		mPopupMenu = new MyMenuPopupWindow(this, 280, LayoutParams.WRAP_CONTENT);
		top_layout = (RelativeLayout) findViewById(R.id.top_layout);
		mPopupMenu.setOnPopupMenuItemClickListener(this);


                more_button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				int height = top_layout.getHeight() + CommonTools.getStatusBarHeight( PopupActivity.this);
				int width = top_layout.getWidth();
				mPopupMenu.showAtLocation(top_layout, Gravity.TOP, width, height);//把Menu设置在top_layout高度开始处,右边开始处
			}
		});
		
	}
     

        //-------自定义的菜单对应的按钮事件------------------------------------
	@Override
	public void onMyFavoritesButtunClick() {
		startActivity(new Intent(this, SplashActivity.class));
	}

	@Override
	public void onMyOrderButtunClick() {
		Toast.makeText(getApplicationContext(), "我的订单", Toast.LENGTH_SHORT).show();
	}

	@Override
	public void onMyresetPasswdButtunClick() {
		Toast.makeText(getApplicationContext(), "修改密码", Toast.LENGTH_SHORT).show();
	}

	@Override
	public void onMyInfosButtunClick() {
		Toast.makeText(getApplicationContext(), "我的资料", Toast.LENGTH_SHORT).show();
	}
}




微信数据解密实战:从EnMicroMsg.db到聊天记录恢复 在移动应用数据安全领域,本地数据库加密是保护用户隐私的核心技术之一。SQLCipher作为SQLite的加密扩展,采用AES-256算法和PBKDF2密钥派生机制,为静态数据提供了可靠的保护层。这项技术的工程价值在于,它允许应用在设备本地安全存储敏感信息,即使设备丢失,未经授权也无法直接读取数据。在数据恢复、安全审计和数字取证等场景中,理解并掌握数据库解密流程至关重要。本文聚焦于微信的EnMicroMsg.db数据库,深入解析其基于IMEI和UIN的密钥生成原理,并详细介绍通过WechatDecrypt工具 阅读详情

相关推荐

Auto-GPT为何无法原生运行于手机端?原理、限制与替代方案

Auto-GPT本质上是一种基于大语言模型的自主任务规划与执行引擎,其核心依赖持续状态维护、多工具协同调用(如Selenium、搜索引擎API)及本地文件读写等能力。这些特性与移动端操作系统(iOS/Android)严格的后台限制、资源管控和沙盒机制存在根本性冲突——既非功能缺失,亦非优化不足,而是运行范式层面的不兼容。因此,真正的Auto-GPT无法以原生App形态在手机上运行;当前所谓‘手机可用’方案,实为云服务器远程执行+手机终端控制,或系统级AI能力(如Apple Intelligence、Gemi

jlins_you的专栏 480

【亲测免费】 BasePopup: 构建灵活高效的Android弹窗解决方案

### **BasePopup是什么?** BasePopup是一款专为简化和增强Android应用中的弹窗体验而生的强大工具包。它不仅仅是对原生`PopupWindow`的一次封装,更是一次彻底的创新与重构,旨在提供更高程度的自由度与丰富的API接口。 - **高度自由度:** 用户可以根据自身需求,利用丰富的API轻松创建多样化的弹窗。 - **丰富API:** 提供了一系列预设样式及动画...

gitblog_00654的博客 1158

Wireshark抓包分析小程序HTTPS接口:从环境搭建到实战解析

网络协议分析是理解现代应用通信原理的基石,它通过捕获和解码数据包,揭示客户端与服务器之间的交互细节。其核心价值在于为开发调试、性能优化和安全审计提供底层可见性。在移动开发领域,小程序接口分析是典型应用场景,尤其当涉及HTTPS加密通信时,需要掌握特定的解密方法。本文聚焦使用Wireshark这一底层网络协议分析器,针对小程序环境,详细阐述了构建抓包环境、配置SSL/TLS解密(涉及root权限与证书安装)以及精准过滤流量的完整流程。通过解析请求行、请求头、请求体与响应,开发者可以深入理解接口构造,有效排查网

dianyin7770的博客 470

工具类-BasePopupWindow

我们在工作中肯定需要用到许多工具类下面我们介绍的是popWindow的Base类 代码如下@SuppressLint("UseSparseArrays") public abstract class BasePopupWindow implements OnClickListener { protected PopupWindow mPop; protected View mCon

MarsKang的博客 2326

ModHeader插件实战:HTTP请求头修改与跨域调试全解析

HTTP请求与响应头是Web开发中控制数据传输、身份认证与安全策略的核心机制。其原理在于客户端与服务器通过预定义的头部字段交换元数据,如Content-Type定义数据格式,Authorization实现身份验证,CORS相关头部管理跨域资源访问。掌握请求头修改技术对前端联调、API测试与多环境部署具有重要价值,能显著提升开发效率,避免频繁修改代码与重启服务。在实际应用中,开发者常需快速切换API环境、模拟移动端请求或临时解决本地开发的跨域问题。ModHeader作为浏览器扩展工具,通过拦截并动态修改HTT

weixin_30644369的博客 411

Cocos Creator 3D入门指南:从零构建3D游戏与交互应用

3D游戏开发与交互内容创作是当前数字内容领域的热点,其核心在于通过三维空间建模、渲染与交互技术构建沉浸式体验。从技术原理层面,这涉及三维坐标系、网格模型、材质贴图、光照计算与物理模拟等基础概念。在工程实践中,开发者需要掌握场景管理、资源管线、脚本逻辑与性能优化等全流程能力,以实现高效、稳定的内容生产。Cocos Creator 3D作为一款轻量级一体化开发平台,通过TypeScript/JavaScript语言支持、可视化编辑器与多平台发布能力,显著降低了3D内容创作的门槛。其内置的物理引擎、动画状态机与U

weixin_34208185的博客 319

探索BasePopup:优雅的Android弹窗库

在Android开发中,实现各种各样的弹窗效果是常见的需求,但往往需要花费大量的时间去定制和优化。现在,借助库,你可以快速且高效地创建出美观、灵活的弹窗,让弹窗功能的实现变得更加简单。 ## 项目简介 BasePopup是由开发者razerdp创建的一个开源Android库,它为开发者提供了一种统一的、强大的弹窗解决方案。该库的目标是通过简单的API调用,让你能够轻松实现复杂弹窗效果,节省开发...

gitblog_00067的博客 738

腾讯云CodingPlan实战指南:开箱即用的DevOps工程化路径

DevOps是现代软件交付的核心范式,其本质在于通过自动化流水线实现代码到服务的可靠、可追溯、可审计转化。腾讯云CodingPlan并非独立产品,而是深度集成CODING DevOps平台与腾讯云IaaS/PaaS服务的一套预置工程实践蓝图,聚焦环境一致性、云原生服务直连与合规性保障三大技术价值。它特别适用于Vue、Spring Boot等主流框架在腾讯云CVM、轻量应用服务器、COS及联络中心等场景的快速落地,有效解决‘腾讯云上传’‘vue项目web端如何接入腾讯云联络外呼’等高频实操断点,为中小团队和云

weixin_34203832的博客 376

仿微信头部工具栏下拉效果

看到好多应用都用到,最近开发自己有用到了,整理一下,做成类似控件,下次快速开发,待完善 源码来源: http://www.eoeandroid.com/thread-235043-1-5.html weixin_plus.png外部引用原始文档 AndroidManifest.xml外部引用原始文档 1 2 3

宝爷的专栏 1167

Android自定义SwipeRefreshLayout高仿微信朋友圈下拉刷新

主要以社交APP的BOSS微信为例,介绍了Android自定义SwipeRefreshLayout高仿微信朋友圈下拉刷新,感兴趣的小伙伴们可以参考一下

(头歌作业)—6.1 葡萄酒评论分析报告(project)

请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。

2301_80677920的博客 1243

Android仿新版微信的小程序下拉栏

作者:大头呆 链接:https://juejin.im/post/5a4c90c15188257c4d1b8d0c  本文经作者授权推送。 上周微信更新到了6.6.1版本,加入了微信小游戏。朋友圈都在玩跳一跳。而且现在微信把最近用过的小程序放到了首页顶部,轻轻下拉就可以快速访问了。可以看下效果,如果还没升级的朋友可要抓紧了。 自己作为一个安卓程序员,虽然不会写小程序,但也要紧...

大灰狼的小绵羊哥哥的博客 3657

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 401

android微信下拉出现小程序,Android 仿新版微信的小程序下拉栏

Android 仿新版微信的小程序下拉栏上周微信更新到了 6.6.1 版本,加入了微信小游戏。朋友圈都在玩跳一跳。而且现在微信把最近用过的小程序放到了首页顶部,轻轻下拉就可以快速访问了。可以看下效果,如果还没升级的朋友可要抓紧了。自己作为一个安卓程序员,虽然不会写小程序,但也要紧跟热潮(蹭热点)啊。于是乎就干脆仿写下这个下拉控件吧。第七宇宙惯例,先上效果图:上图的主界面是我上一篇文章《撸一款全手势...

weixin_34901388的博客 837

保姆级教程:在Windows 10/11上安装配置KNIME 5.8.0(含中文文本库更新)

本文提供在Windows 10/11系统上安装配置KNIME 5.8.0的详细指南,包括中文文本库更新和性能优化方案。从环境准备、安装流程到中文文本处理能力强化,逐步指导用户搭建高效的数据分析环境,特别针对国内网络环境和中文用户需求提供实用解决方案。

weixin_29081101的博客 669

普源精电DHO系列示波器选购指南:从学生党到工程师的完整对比

本文深入评测普源精电DHO系列示波器,从DHO800到DHO4000各型号的核心参数、功能特点及适用场景进行全面对比,帮助学生党和工程师根据实际需求选择最佳型号。重点分析带宽、采样率、存储深度等关键指标,并提供实用的选购建议和进阶使用技巧,帮助用户充分发挥示波器性能。

weixin_30485379的博客 167

android微信下拉出现小程序,仿新版微信的小程序下拉栏

原标题:仿新版微信的小程序下拉栏 本项目会对金融交易软件中存在的各种View进行模仿绘制,提供详细的实现思路,收集整理相关算法、文档以及专业资料。https://github.com/scsfwgy/FinancialCustomerView本文作者作者:大头呆链接:https://www.jianshu.com/p/fe6efe2f5978本文由作者授权发布。1概述上周微信更新到了6.6.1版本...

weixin_39600510的博客 444

嵌入式开发必备:UART、RS232、RS485通信协议实战对比(附代码示例)

本文从嵌入式开发实战角度,深度对比了UART、RS232和RS485三种核心串行通信协议。详细解析了它们的工作原理、硬件连接、代码配置及典型应用场景,并提供了基于通信距离、节点数量和电磁环境的三维度选型指南,帮助开发者根据项目需求做出最优技术决策。

i0j1k2l3m的博客 474

微信 6.7.2 安卓内测版本,你体验了吗?

点击上方“程序IT圈”,选择“置顶公众号”关键时刻,第一时间送达!微信又公布微信 6.7.2 安卓内测版本,你开始体验了吗?我看到后,立马体验了一下,与目前的最新版本相比,其最大的变化是...

程序IT圈 175

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

weixin_45011386的博客 3823

066、AR 应用中虚拟物体漂移抖动?IMU 融合 + 光流追踪的视觉里程计优化方案

AR应用中虚拟物体漂移抖动优化方案 摘要:针对AR应用中虚拟物体漂移抖动问题,提出一种IMU融合与光流追踪的视觉里程计优化方案。关键点包括:1) 采用IMU预积分技术处理高频噪声,通过中值积分计算帧间相对运动约束;2) 使用金字塔LK光流追踪像素运动,通过中值偏差法剔除异常值;3) 构建10帧滑动窗口的紧耦合优化框架,将IMU预积分约束和光流重投影约束联合优化。实验表明,该方法有效解决了时间戳未对齐导致的"跳舞箭头"现象,在手机端实现稳定30fps的AR定位精度,漂移误差降低至厘米级。特别提醒:IMU与视觉

ai技术增长的博客 161

微信聊天记录本地导出:两种主流技术方案详解与实操指南

数据备份与提取是数字资产管理中的基础需求,其核心原理在于对应用程序本地存储的结构化数据进行访问与解析。在技术实现上,SQLite作为轻量级嵌入式数据库,因其高性能和低开销,被广泛应用于桌面与移动端应用的数据存储层。通过直接读取或解密备份文件中的SQLite数据库,可以实现对应用数据的结构化提取,这一技术对于个人数据归档、合规审计及内容分析具有重要价值。本文聚焦于微信聊天记录的本地导出,详细对比了基于备份文件解析和直接读取本地数据库两种主流方案。其中,备份文件解析方案涉及对加密备份文件的解密操作,而本地数据库

weixin_33766805的博客 443

MTK-Android12开机应用自启需求-自定义原生Launcher3 主界面布局图标

MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。添加一个属性定义即可,如下:这里自定义一个属性目的是为了在加载Launcher3启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。这里有两种方案,要么在Launcher3里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3中去实现,体验效果更好。// 第一步:定义属性,// 第二步:在onCreate 方法中获取属性并启动应用。

十年饮冰,难凉热血 1376

安卓pdf阅读器_文石BOOX Nova3电子书阅读器到底值不值得买?Nava2老用户心得分享!(2020年双十一)...

如果对电子书阅读器的选择一直犹豫不决,可以参考我这篇文章:皇帝菜:2020年双十一,手把手教你选购电子书阅读器!(Kindle/掌阅电子纸/文石电子书/小米电纸书…)本文近2000字,图多。下面正式进入正题。10月19号文石就要推出BOOX Nova3了,到底值不值得买?由于目前相关的参数信息还没公开,我仅以一个Nova2的用户视角来详细介绍文石BOOX阅读器的特征。文石在2020年4月23日发布...

weixin_39820997的博客 1139

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IOS比较常用的第三方及实例

IOS比较常用的第三方及实例 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github.com/jdg/MBProgressHUD 地址:https://github.com/SVProgressHUD/SVProgressHUD ...

weixin_30822451的博客 3376

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机及软件测试基础理论

一、计算机的定义   电脑(pc) 二、计算机的基本特点   1.可以进行数学和逻辑运算   2.可以存储数据   3.可以高效的自动运行(根据程序指令) 三、计算机的组成部分 硬件系统: 输入设备 输出设备 运算器、控制器(中央处理器、cpu) 存储器: 内存:断电后数据丢失 运算速度快于外存 外存:断电后数据保留 软件系统: 系统软件: (1)桌面操作系统(pc端操作系统):Windows(用户量大)、macOS(苹果电脑的默认系统)、Linux(应用软件较少,IT从业人员必须掌握的系统) (2)移动端

agent666的博客 816

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 程序锁
下一篇: 动态加载View布局实现drawableLeft,drawableRight
EileenChing
博客等级 码龄12年 1粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值