- 浏览: 48289 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
嘟嘟橙:
新手请教,就是添加较多联系人时,速度会慢,有没有优化的办法? ...
批量添加联系人 -
嘟嘟橙:
新手学习。感谢分享。
批量添加联系人 -
one_old_water:
哥,网上传来传去的就是想要那种效果:按第一次会提示,两秒后按还 ...
My “再按一次后退键退出应用” -
yx1989:
<div class="quote_title ...
批量添加联系人 -
qiuyouzhi:
你好,我用这种方式插入联系人,当联系人在二三百条时候,将近耗了 ...
批量添加联系人
来自海涛给的例子,谢谢海涛一直的指导!
系统的slidingDrawer貌似只能从下往上,或者从右往左!
这个例子是 实现 任意方向,当然你可以将布局改为相对布局将其放在任何地方
其实就是一个自定义组件,然后将其放在 你的主程序的布局中,类似slidingDrawer那样:
一个handler,一个content布局
自定义组件的class:
图片自己去搞定咯,随便找个做个测试就可以!
主程序的布局里面 此组件的例子:
组件里面用到的attrs
好了 附上工程
系统的slidingDrawer貌似只能从下往上,或者从右往左!
这个例子是 实现 任意方向,当然你可以将布局改为相对布局将其放在任何地方
其实就是一个自定义组件,然后将其放在 你的主程序的布局中,类似slidingDrawer那样:
一个handler,一个content布局
自定义组件的class:
public class PanelView extends LinearLayout { private int mDuration; private int mPosition; private Boolean isAnimation; private int mOrientation; private int BOTTOM = 1; private int TOP = 0; private int LEFT = 2; private int RIGHT = 3; private Drawable mOpenedHandle; private Drawable mClosedHandle; private Button mHandle; private LinearLayout mContent; public PanelView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Panel); mDuration = a.getInteger(R.styleable.Panel_animationDuration, 750); mPosition = a.getInteger(R.styleable.Panel_position, BOTTOM); isAnimation = a.getBoolean(R.styleable.Panel_animationEnable, true); a.recycle(); // 根据mPosition 决定LinearLayout的android:orientation属性 mOrientation = (mPosition == TOP || mPosition == BOTTOM) ? VERTICAL : HORIZONTAL; setOrientation(mOrientation); initialHandlerBg(); } // 设置mHandle所用背景图 private void initialHandlerBg() { if (mPosition == LEFT) { mOpenedHandle = getResources().getDrawable( R.drawable.right_switcher_expanded_background); mClosedHandle = getResources().getDrawable( R.drawable.left_switcher_expanded_background); } else if(mPosition == TOP){ mOpenedHandle = getResources().getDrawable( R.drawable.top_switcher_collapsed_background); mClosedHandle = getResources().getDrawable( R.drawable.top_switcher_expanded_background); } else { mOpenedHandle = getResources().getDrawable( R.drawable.left_switcher_collapsed_background); mClosedHandle = getResources().getDrawable( R.drawable.right_switcher_expanded_background); } } // 回调函数 界面初始化快结束时调用 用于得到 mHandle/mContent protected void onFinishInflate() { super.onFinishInflate(); // 得到mHandle实例 mHandle = (Button) this.getChildAt(0); if (mHandle == null) { throw new RuntimeException("Your Panel must have a View - mHandle"); } mHandle.setOnClickListener(clickListener); mContent = (LinearLayout) this.getChildAt(1); if (mContent == null) { throw new RuntimeException("Your Panel must have a View - mContent"); } // 先移除mHandle/mContent 然后根据position决定二者的添加次序 removeView(mHandle); removeView(mContent); if (mPosition == TOP || mPosition == LEFT) { addView(mContent); addView(mHandle); } else { addView(mHandle); addView(mContent); } if (mClosedHandle != null) { mHandle.setBackgroundDrawable(mClosedHandle); } // 隐藏 mContent mContent.setVisibility(GONE); } private int mContentWidth=200; private int mContentHeight=100; private int paddingTop; private int paddingLeft; private Boolean isContentExpand = false; @Override // 回调函数 此时其内所有子View 宽度/高度 都已确定 protected void onLayout(boolean changed, int l, int t, int r, int b) { // TODO Auto-generated method stub super.onLayout(changed, l, t, r, b); // mContentWidth = mContent.getWidth(); // mContentHeight = mContent.getHeight(); paddingTop = this.getPaddingTop(); paddingLeft = this.getPaddingLeft(); } // 定义mHandle监听器 用于开合mContent OnClickListener clickListener = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (!isContentExpand) { open(); } else { close(); } // 置反 即:开-合-开-合-开-... isContentExpand = !isContentExpand; } }; // 回调函数 用于监听 Panel 的开合 效果见:setOnClickLstener(OnClickListener listener) public static interface OnPanelListener { // - open public void onPanelOpened(PanelView panel); // - close public void onPanelClosed(PanelView panel); } public void open() { if (isAnimation) { doAnimationOpen(); } else { doOpen(); } } public void doOpen() { mContent.setVisibility(VISIBLE); } public void doAnimationOpen() { post(aOpen); } Runnable aOpen = new Runnable() { public void run() { TranslateAnimation animation; int fromXDelta = 0, toXDelta = 0, fromYDelta = 0, toYDelta = 0; int calculatedDuration = 0; if (mPosition == TOP) { fromYDelta = -1 * mContentHeight; toXDelta = 0; calculatedDuration = mDuration * Math.abs(toYDelta - fromYDelta) / mContentHeight; } else if (mPosition == BOTTOM) { fromYDelta = paddingTop; toYDelta = fromYDelta + 1 * mContentHeight; calculatedDuration = mDuration * Math.abs(toYDelta - fromYDelta) / mContentHeight; } else if (mPosition == LEFT) { fromXDelta = -1 * mContentWidth; toXDelta= 0; calculatedDuration = mDuration * Math.abs(toXDelta - fromXDelta) / mContentWidth; } else if (mPosition == RIGHT) { fromXDelta = paddingLeft; toXDelta = fromYDelta + 1 * mContentHeight; calculatedDuration = mDuration * Math.abs(toYDelta - fromYDelta) / mContentHeight; } animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta); animation.setDuration(calculatedDuration); animation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { mContent.setVisibility(VISIBLE); } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { postProcess(); } }); startAnimation(animation); } }; public void close() { if (isAnimation) { doAnimationClose(); } else { doClose(); } } public void doClose() { mContent.setVisibility(GONE); } public void doAnimationClose() { post(aClose); } Runnable aClose = new Runnable() { public void run() { TranslateAnimation animation; int fromXDelta = 0, toXDelta = 0, fromYDelta = 0, toYDelta = 0; int calculatedDuration = 0; if (mPosition == TOP) { toYDelta = -1 * mContentHeight; calculatedDuration = mDuration * Math.abs(toYDelta - fromYDelta) / mContentHeight; } else if (mPosition == BOTTOM) { fromYDelta = 1 * mContentHeight; toYDelta = paddingTop; calculatedDuration = mDuration * Math.abs(toYDelta - fromYDelta) / mContentHeight; } else if (mPosition == LEFT) { toXDelta = -1 * mContentWidth; calculatedDuration = mDuration * Math.abs(toXDelta - fromXDelta) / mContentWidth; } else if (mPosition == RIGHT) { } animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta); animation.setDuration(calculatedDuration); animation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mContent.setVisibility(View.GONE); postProcess(); } }); startAnimation(animation); } }; private OnPanelListener panelListener; // 善后工作 比如:改变mHandle背景图 通知开合监听器 private void postProcess() { if (!isContentExpand) { mHandle.setBackgroundDrawable(mClosedHandle); } else { mHandle.setBackgroundDrawable( mOpenedHandle); } if (panelListener != null) { if (isContentExpand) { panelListener.onPanelOpened(PanelView.this); } else { panelListener.onPanelClosed(PanelView.this); } } } }
图片自己去搞定咯,随便找个做个测试就可以!
主程序的布局里面 此组件的例子:
<com.SildingDrawPanel.PanelView android:id="@+id/leftPanel" android:layout_width="wrap_content" android:layout_height="wrap_content" panel:position="left" panel:animationDuration="500" panel:animationEnable="true" android:layout_gravity="left"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> //content </LinearLayout> </com.SildingDrawPanel.PanelView>
组件里面用到的attrs
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Panel"> <attr name="animationDuration" format="integer" /> <attr name="position"> <enum name="top" value="0" /> <enum name="bottom" value="1" /> <enum name="left" value="2" /> <enum name="right" value="3" /> </attr> <attr name="animationEnable" format="boolean" /> </declare-styleable> </resources>
好了 附上工程
- SildingDrawPanel.rar (79 KB)
- 下载次数: 31
发表评论
-
蓝牙传输文件
2011-09-28 10:51 4240这篇文章分为两部分: 第一部分:使用系统自身带的蓝牙功能,直 ... -
通讯录侧边栏快速滑动效果的实现
2011-09-20 10:40 3539那,我原创的文章比较少,所以基本上都是自己看了,然后稍加修改的 ... -
【转】Android APK反编译详解(附图)
2011-09-06 10:18 1042原帖地址:http://www.devdiv.com/arti ... -
解析xml
2011-09-05 15:17 904FileInfo是我自己定义的类 public clas ... -
利用popupWindow来制作自定义menu
2011-09-05 15:07 1817我找了好久没发现怎么给系统自带的menu换背景,网上有个帖子写 ... -
java 对读取的文件进行排序
2011-09-05 14:51 7643参数里面的isAscend 用来决定是升序排列 还是降序排列: ... -
java 递归读取文件夹里的文件
2011-09-05 14:40 5671public static void scanSingle ... -
java 基本的文件操作
2011-09-05 14:35 930好吧,我基础真的很不扎实。 基本的文件操作都不熟,那么多总结 ... -
获取未安装apk的信息
2011-09-05 14:13 1800申明不是原创,忘记是在哪看的啦,网上转的那么多,也不知道谁是原 ... -
利用图片的填充属性来制作进度条
2011-09-05 12:46 2418大概原理就是定义了imageView 然后他的背景是一个bit ... -
【转】工作八年总结
2011-09-02 23:26 748我只是想在某些时候想看再看一遍时候不至于到处去找,所以就转了原 ... -
显示隐藏软键盘
2011-08-30 10:44 875public void showInput(boolean ... -
My “再按一次后退键退出应用”
2011-07-20 16:50 1117其实你去网上搜这个标题一大堆的帖子,千篇一律的转自同一个人的帖 ... -
【转】Toast大全
2011-07-20 16:36 1233长见识了,转来留着用 原帖地址:http://www.cnb ... -
【转】关于android.view.WindowLeaked的解决方案
2011-07-12 09:15 843原帖:http://blog.csdn.net/u_x ... -
android程序换皮肤之二
2011-06-25 12:48 3079通过网上流传的sharedUserId实现 不同程序 ... -
android程序换皮肤之一
2011-06-23 20:13 3092皮肤内置在程序里面的!其实可以不用我这么复杂的,直接每次换肤更 ... -
批量添加联系人
2011-06-21 20:21 4475说实话,我找了一整天的帖子,好像所有关于批量添加联系人的帖子都 ... -
联系人的基本操作
2011-06-21 20:07 1187其实联系人那几个表刚开始看起来很绕的! 后来接触 ...
相关推荐
基于改进粒子群算法的DG储能选址定容优化模型:解决电力系统时序性问题的可靠程序解决方案,基于改进粒子群算法的DG储能选址定容模型优化解决电力系统问题,DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题。下面我将对程序进行详细分析。 首先,程序开始时加载了一些数据文件,包括gfjl、fljl、fhjl1、cjgs和fhbl。这些文件可能包含了电力系统的各种参数和数据。 接下来是一些参数的设置,包括三种蓄电池的参数矩阵、迭代次数、种群大小、速度更新参数、惯性权重、储能动作策略和限制条件等。 然后,程序进行了一些初始化操作,包括初始化种群、速度和适应度等。 接下来是主要的迭代过程。程序使用粒子群算法的思想,通过更新粒子的位置和速度来寻找最优解。在每次迭代中,程序计算了每个粒子的适应度,并更新个体最佳位置和全局最佳位置。 在每次迭代中,程序还进行了一些额外的计算,如潮流计算、储能约束等。这些计算可能涉及到电力系统的潮流计算、功率平衡等知识点。 最后,程序输
数学建模相关主题资源2
内容概要:本文详细介绍了一系列用于科学研究、工程项目和技术开发中至关重要的实验程序编写与文档报告撰写的资源和工具。从代码托管平台(GitHub/GitLab/Kaggle/CodeOcean)到云端计算环境(Colab),以及多种类型的编辑器(LaTeX/Microsoft Word/Overleaf/Typora),还有涵盖整个研究周期的各种辅助工具:如可视化工具(Tableau)、数据分析平台(R/Pandas)、项目管理工具(Trello/Jira)、数据管理和伦理审核支持(Figshare/IRB等),最后提供了典型报告的具体结构指导及其范本实例链接(arXiv/PubMed)。这为实验流程中的各个环节提供了系统的解决方案,极大地提高了工作的效率。 适合人群:高校学生、科研工作者、工程技术人员以及从事学术写作的人员,无论是新手入门还是有一定经验的人士都能从中受益。 使用场景及目标:帮助读者高效地准备并开展实验研究活动;促进团队间协作交流;规范研究报告的形式;提高对所收集资料的安全性和隐私保护意识;确保遵循国际公认的伦理准则进行实验。
四轮毂驱动电动汽车稳定性控制策略:基于滑模与模糊神经网络的转矩分配与仿真研究,四轮毂驱动电动汽车稳定性控制:基于滑模与模糊神经网络的转矩分配策略及联合仿真验证,四轮毂驱动电动汽车稳定性控制,分布式驱动转矩分配。 上层基于滑模,模糊神经网络控制器决策横摆力矩,下层基于动态载荷分配,最优分配,平均分配均可做。 simulink与carsim联合仿真。 ,四轮毂驱动;电动汽车稳定性控制;分布式驱动;转矩分配;滑模控制;模糊神经网络控制器;横摆力矩;动态载荷分配;最优分配;平均分配;Simulink仿真;Carsim仿真,四驱电动稳定性控制:滑模与模糊神经网络决策的转矩分配研究
本资源提供了一份详细的PyCharm安装教程,涵盖下载、安装、配置、激活及使用步骤,适合新手快速搭建Python开发环境。
毕业设计
原版宋体.ttf,原版宋体安装文件,安装方式,直接右键安装。
利用Xilinx FPGA内嵌的软核处理器MicroBlaze,加上自主编写的AXI_IIC控制器,实现对IMX327传感器IIC总线的控制,同时辅以UART调试串口,实现系统状态的实时监控与调试。
在 GEE(Google Earth Engine)中,XEE 包是一个用于处理和分析地理空间数据的工具。以下是对 GEE 中 XEE 包的具体介绍: 主要特性 地理数据处理:提供强大的函数和工具,用于处理遥感影像和其他地理空间数据。 高效计算:利用云计算能力,支持大规模数据集的快速处理。 可视化:内置可视化工具,方便用户查看和分析数据。 集成性:可以与其他 GEE API 和工具无缝集成,支持多种数据源。 适用场景 环境监测:用于监测森林砍伐、城市扩展、水体变化等环境问题。 农业分析:分析作物生长、土地利用变化等农业相关数据。 气候研究:研究气候变化对生态系统和人类活动的影响。
毕业设计
整个文件的代码
名字微控制器_STM32_DFU_引导加载程序_dapboo_1740989527.zip
详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/145991332
anaconda配置pytorch环境
立体仓库控制组态王6.55与三菱PLC联机仿真程序:视频教程与IO表接线图CAD详解,9仓位立体仓库控制系统优化方案:组态王6.55与三菱PLC联机仿真程序视频教程及IO表接线图CAD详解,9仓位立体仓库控制组态王6.55和三菱PLC联机仿真程序+视频+带io表接线图CAD ,关键词:立体仓库;控制组态王6.55;三菱PLC;联机仿真程序;视频;io表接线图;CAD,立体仓库控制组态王与三菱PLC联机仿真程序资源包
基于Maxwwell设计的经典外转子永磁同步电机案例:直流母线24V,大功率与高效率驱动设计,基于Maxwell设计的经典永磁同步电机案例:200W功率,外转子结构,直流母线电压与电机参数详解,基于maxwwell设计的经典200W,2200RPM 外转子,直流母线24V,42极36槽,定子外径81.5 轴向长度15 ,0.86Nm, 永磁同步电机(PMSM)设计案例,该案例可用于生产,或者学习用 ,经典设计案例; 200W; 2200RPM外转子; 直流母线24V; 42极36槽; 定子外径81.5; 轴向长度15; 永磁同步电机(PMSM); 生产学习用。,经典200W永磁同步电机设计案例:Maxwell外转子,高效率2200RPM直流母线系统
C# Modbus RTU协议主站设计工程源码详解:支持多从站访问与多线程实现,带注释开源dll文件,C# Modbus RTU协议主站设计工程源码解析:多线程实现访问多个从站功能的开源dll文件,C# Modbus RTU协议主站设计工程源码带注释,开源dll文件,支持访问多个从站,多线程实现 ,C#; Modbus RTU协议; 主站设计; 工程源码; 注释; 开源dll; 多从站访问; 多线程实现,《C# Modbus RTU主站源码:多线程支持访问多从站开源DLL文件详解》
MATLAB Simulink下的四旋翼无人机PID控制仿真模型研究,MATLAB Simulink下的四旋翼无人机PID控制仿真模型研究,MATLAB Simulink 四旋翼仿真模型 四轴无人机PID控制 ,MATLAB; Simulink; 四旋翼仿真模型; 四轴无人机; PID控制,MATLAB Simulink四旋翼仿真模型中四轴无人机的PID控制研究