首页 文章 精选 留言 我的

精选列表

搜索[传媒云原生移动开发平台],共10000篇文章
优秀的个人博客,低调大师

Oracle开发常用函数与存储过程

1.输出用"、"符合分隔多个作者列表 Fuc_Get_AuthorName 2.获取数据库表的主键最大值 Fuc_Get_MaxId 3.根据分割类来分割字符串 sf_split_string 4.计算周岁的函数 Fuc_Get_FullAge 5.获取数据表架构信息 SQL 6.带排序的oracle分页存储过程(来自网络) Code 本文转自peterzb博客园博客,原文链接:http://www.cnblogs.com/peterzb/archive/2009/06/09/1500031.html,如需转载请自行联系原作者。

优秀的个人博客,低调大师

【iOS 开发】延迟执行方法小总结

当需要实现类似“轮询”这种操作的时候,我们可能会希望有一个“被放缓了的” for 循环 —— 即当某次操作执行后,稍等一下再去执行下一次操作。这时有几种方法可以供我们使用,来实现这种效果,下面对比总结一下。 perform(_ aSelector: Selector, with anArgument: Any?, afterDelay delay: TimeInterval) extension NSObject { open func perform(_ aSelector: Selector, with anArgument: Any?, afterDelay delay: TimeInterval, inModes modes: [RunLoopMode]) open func perform(_ aSelector: Selector, with anArgument: Any?, afterDelay delay: TimeInterval) open class func cancelPreviousPerformRequests(withTarget aTarget: Any, selector aSelector: Selector, object anArgument: Any?) open class func cancelPreviousPerformRequests(withTarget aTarget: Any) } extension RunLoop { open func perform(_ aSelector: Selector, target: Any, argument arg: Any?, order: Int, modes: [RunLoopMode]) open func cancelPerform(_ aSelector: Selector, target: Any, argument arg: Any?) open func cancelPerformSelectors(withTarget target: Any) } 这是系统提供的 API,其中最简单的第 2 个方法可以通过指定方法、参数、延迟时间来实现延迟调用。 优点:使用简单、自带根据 target 取消调用的机制 并且可以指定对象、方法来取消延迟调用 使得这个方法可以完成一些复杂的延迟调用机制缺点:系统帮你自动完成了很多操作,使得它不像定时器(NSTimer)那样高度可控。 scheduledTimer(timeInterval ti: TimeInterval, target aTarget: Any, selector aSelector: Selector, userInfo: Any?, repeats yesOrNo: Bool) -> Timer open class Timer : NSObject { public /*not inherited*/ init(timeInterval ti: TimeInterval, invocation: NSInvocation, repeats yesOrNo: Bool) open class func scheduledTimer(timeInterval ti: TimeInterval, invocation: NSInvocation, repeats yesOrNo: Bool) -> Timer public /*not inherited*/ init(timeInterval ti: TimeInterval, target aTarget: Any, selector aSelector: Selector, userInfo: Any?, repeats yesOrNo: Bool) open class func scheduledTimer(timeInterval ti: TimeInterval, target aTarget: Any, selector aSelector: Selector, userInfo: Any?, repeats yesOrNo: Bool) -> Timer } 通过常见的定时器也可以实现延迟调用,把 repeats 参数置为 false,可以实现类似上面的 perform 的效果。 优点:定时器状态可控,可以重新赋值,可以查看是否 valid 等缺点:对比上面的 perform 方法可以直接传参,这里想要传参的话只能曲线救国: 把参数放在 timer 的 userInfo 里面,再把 timer 本身当成参数传递(这里使得代码可读性稍稍变差,但是好在 userInfo 里面什么都能放,这使得我们可以同时传递多个参数了) 如果你的代码可以不兼容 iOS 10 以下的系统,新的 API 可以让你不通过 selector 而是通过 block (closure) 执行代码 asyncAfter(deadline: DispatchTime, qos: DispatchQoS = default, flags: DispatchWorkItemFlags = default, execute work: @escaping @convention(block) () -> Swift.Void) DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 1, execute: { print("1 second after") }) 上面这段代码,可以在 1 秒之后,通过主线程执行 print。值得注意的是,设定时间的时候,有两种类型,一种是 DispatchTime,这个时间本质上是相对时间,它会在系统休眠的时候暂停,另外一种是 DispatchWallTime,这个时间正如其名,是“墙上的挂钟时间”,是绝对时间,比如你可能希望某一个任务准确地在x小时、x分钟、x秒之后执行,这段时间可能发生任何事情,这时推荐使用 DispatchWallTime. 神奇而伟大的 GCD 这里就不多做介绍了,有太多文章讲解它了优点:执行的是闭包,可以随意传参缺点:一旦开启,无法取消,只能提前在闭包里面添加严谨的逻辑判断了

优秀的个人博客,低调大师

Android开发六 电话拔号器

效果图: 因为应用要使用手机的电话服务,所以要在清单文件AndroidManifest.xml中添加电话服务权限: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.action" android:versionCode="1" android:versionName="1.0"> 略.... <uses-sdk android:minSdkVersion=“8" /> <uses-permission android:name="android.permission.CALL_PHONE"/> </manifest> 界面布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/inputmobile"/> <EditTextandroid:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/mobile"/> <Buttonandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" android:id="@+id/button"/> </LinearLayout> LinearLayout (线性布局)、AbsoluteLayout(绝对布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局) Activity: public class DialerAction extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { EditText editText = (EditText)findViewById(R.id.mobile); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ editText.getText())); DialerAction.this.startActivity(intent); } }); } }测试步骤: 1>在Eclipse中运行此应用 2>在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令再开启一个Android模拟器: emulator -data itcast 注:itcast为用户数据存取文件,如果该文件不存在,默认在tools目录创建该文件 3>在电话扰号器中输入上图现显的电话号码 本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2012/04/01/2428995.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android应用开发—TextView的动态创建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/77131800 动态创建TextView的两种方式: 下面介绍两种创建方式: 在drawable里面创建共同依赖的background.xml文件,里面设置shape来设置文本框的一些特殊效果: eg: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 实心 --> <solid android:color="@android:color/white" /> <!-- 边框 --> <stroke android:width="0.5dp" android:color="@android:color/black" /> <!-- 圆角 --> <corners android:radius="3dp" /> <!-- 边距 --> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> <!-- 渐变 --> <gradient android:angle="270" android:endColor="#FFFF782" android:startColor="#13C7AF" /> </shape> 代码方式: TextView textView = new TextView(context); textView.setId(id); textView.setText("android"); textView.setTextColor(0xff999faa); textView.setTextSize(12); textView.setBackgroundResource(R.drawable.background); xml配置文件和代码结合方式: textview_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#999faa" android:textSize="12sp" android:background="@drawable/background" android:text="android" /> </LinearLayout> ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(this).inflate(R.layout.textiew, null); TextView textView = (TextView) findViewById(R.id.textView); viewGroup.removeView(textView); //替换掉textId textView.setId(id); 这样通过前面的两种方式即可创建一个TextView控件,通过xxxViewGroup.addView(textView)即可将改textView加入到xxxViewGroup中。 TextView控件布局位置的控制: 上面创建了textView控件,但该控件的布局位置并没有确定,而这个布局位置又是十分重要的,否则该控件也没有存在的意义。 //此处以RelativeLayout布局为例,同样LinearLayout也支持该接口 //设置RelativeLayout布局的宽高 RelativeLayout.LayoutParams reLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); //以下rules说明设置控件在xxxView的右侧,父控件的底部 reLayoutParams.addRule(RelativeLayout.RIGHT_OF, xxxViewId); reLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); //setMargins设置控件相对其他控件的间隔 reLayoutParams.setMargins(left, top, right, bottom); 以上代码只完成了RelativeLayout的布局rules的设置,如何和待控制的控件绑定呢? xxxViewGroup.addView(textView,reLayoutParams); 为TextView添加边框 在文章开始部分创建了一个background.xml文件,但并没有说明该xml文件的作用,不过也容易猜到,这个background.xml为textView设置了一个边框。 默认情况下TextView控件是没有边框的,如何创建边框,有以下方式: 设置background为透明图片的背景图。 通过shape设置背景图片。(推荐,background.xml即为这个shape配置文件,对该文件各项参数的设置,请参考google) 对前面代码中几处关键点的说明: View.setId(int id)如何避免id冲突: 按照规则,每个View都必须有一个唯一的标识符,这个标识符是一个正整数。而我们上面代码中动态创建的View要如何保证id的唯一性? 在sdk17 以上使用myView.setId(View.generateViewId());在低于17 的版本中我们需要自己去实现一些方法,参考View.Java的内部实现: private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); /** * Generate a value suitable for use in {@link #setId(int)}. * This value will not collide with ID values generated at build time by aapt for R.id. * * @return a generated ID value */ public static int generateViewId() { for (;;) { final int result = sNextGeneratedId.get(); // aapt-generated IDs have the high byte nonzero; clamp to the range under that. int newValue = result + 1; if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0. if (sNextGeneratedId.compareAndSet(result, newValue)) { return result; } } } ID大于0x00FFFFFF的已经在xml中定义到了,容易发生冲突。 在调用的地方可以这样使用: if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { myView.setId(Utils.generateViewId()); } else { myView.setId(View.generateViewId()); } } 为什么要调用viewGroup.removeView(textView)? 一个View只能依赖于一个父ViewGroup,我们通过inflate这种方式创建的view已经属于一个ViewGroup了,所以此处需要父ViewGroup先remove掉,否则会报这样的错误:”The specified child already has a parent. You must call removeView” 关于异常“The specified child already has a parent. You must call removeView”的解决 扩展内容—动态添加布局 前面讲到动态添加控件,而布局同样可以动态添加: 方法和上面类似,主要注重如何控制添加的布局的位置,在控制布局的位置的时候使用LayoutParam类来实现。 RelativeLayout rl = new RelativeLayout(this); //设置RelativeLayout布局的宽高 RelativeLayout.LayoutParams relLayoutParams=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); xxxViewGroup.addView(rl, relLayoutParams); 控件属性相关的一些动态设置的接口: // 设置背景图 textView.setBackgroundResource(R.drawable.block_text_backgroumg); // 设置背景透明度 textView.getBackground().setAlpha(150); // 设定text内容为Html格式 textView.setText(Html.fromHtml(rsultText)); // 设定为可以scroll的textView textView.setMovementMethod(ScrollingMovementMethod.getInstance()); // 设定text内容与边框的距离 textView.setPadding(6, 6, 6, 6); 参考资料: Android 利用addView 动态给Activity添加View组件 android 中使用View.setId(int id),如何避免id冲突呢?

优秀的个人博客,低调大师

iOS开发-UITableView顶部图片下拉放大

关于顶部图片下拉放大,在用户展示的个人中心显示用户个人头像信息,设置UITableView的headerView实现,UITableView继承自UIScrollView,同样的设置UIScrollView的顶部图片也可以实现同样的效果,简单看一下实现的效果: 控制器中设置需要的属性变量: 1 2 3 4 @property (strong,nonatomic) UITableView *tableView; @property (strong,nonatomic) NSArray *data; @property (strong,nonatomic) UIView *tableHeaderView; @property (strong,nonatomic) UIImageView *imageView; 初始化属性: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 -(UITableView *)tableView{ if (!_tableView) { _tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 0,SCREENWIDTH, SCREENHEIGHT)]; _tableView. delegate =self; _tableView.dataSource=self; _tableView.showsVerticalScrollIndicator=NO; _tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; [_tableView registerClass:[UITableViewCell class ] forCellReuseIdentifier:CellIdetifier]; } return _tableView; } -(UIView *)tableHeaderView{ if (!_tableHeaderView) { _tableHeaderView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0,SCREENWIDTH, 100)]; } return _tableHeaderView; } -(UIImageView *)imageView{ if (!_imageView) { _imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, SCREENWIDTH, 100)]; _imageView.autoresizingMask=UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; _imageView.clipsToBounds=YES; _imageView.contentMode=UIViewContentModeScaleAspectFill; } return _imageView; } UITableViewDelegate实现: 1 2 3 4 5 6 7 8 9 10 11 12 13 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [self.data count]; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdetifier]; [cell.textLabel setText:self.data[indexPath.row]]; return cell; } ViewDidLoad中初始化imageView: 1 2 3 4 5 6 self.data=@[ @"FlyElephant" , @"博客园" , @"UITableView图片放大" , @"http://www.cnblogs.com/xiaofeixiang/" ]; self.imageView.image=[UIImage imageNamed: @"Girl" ]; self.imageView.contentMode=UIViewContentModeScaleAspectFill; [self.tableHeaderView addSubview:self.imageView]; self.tableView.tableHeaderView=self.tableHeaderView; [self.view addSubview:self.tableView]; 在UITableViewView向下拉动的过程中,改变imageView的位置: 1 2 3 4 5 6 7 8 9 10 -( void )scrollViewDidScroll:(UIScrollView *)scrollView{ CGPoint offset = scrollView.contentOffset; if (offset.y < 0) { CGRect rect =self.tableHeaderView.frame; rect.origin.y = offset.y; rect.size.height =CGRectGetHeight(rect)-offset.y; self.imageView.frame = rect; self.tableHeaderView.clipsToBounds=NO; } } 实现起来比较简单,希望对有需要的人有所帮助~ 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/5129073.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册