技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

Android开发学习之微信公众号界面

            接着上一篇博客中的卡片式设计,我们继续从微信中寻找一些线索,我们首先来看这样一个界面,这是微信中默认的一个公众号,主要是发布腾讯新闻上的最新动态,我们可以看出,它采用了类似于我们在上一篇文章中采用的卡片式布局。那么,今天就让我们一起来做这样一个界面吧!           第一步,当然是创建layout_item的布局,即列表项目的布局,这里直接给出布局代码,代码并不复杂,只是属性设置较为繁琐。... 全文

微信 Android应用开发 android应用 android开发 android

盘点Android应用程序商店类型

Android Market 装着什么,他们的梦想么?怀揣成为Android乱世中另一个“App Store”的梦想,无论是硬件厂商、ROM 制作者、浏览器还是 B2C 行业的寡头,纷纷推出各自的应用商店,名字叫法不尽相同,但目的只有一个:在蓬勃发展的移动互联网市场中,利用自身积累的优势资源,借助已经取得成功的App Store模式,完成抢滩登陆的战役。而App Store模式的商业竞争中,总会提到两个要点:用户与内容。... 全文

Android应用程序商店 Android Market Android

Android开发速成简洁教程二十三:发布应用

到这里基本介绍了Android开发的一些基本知识,在开发实际应用时最常用的几个参考是:... 全文

Android开发 Android应用 发布应用

Android开发速成简洁教程四:Android应用基本概念

Android平台的一个显著的特点是“低耦合”。Activity是Android应用的一个最基本的用户UI模块。如果采用 Windows Form应用作为参照,Activity相当于Windows中的WinForm。和Windows 应用不同的是,运行一个Activity或是Activity之间的交互是通过消息来实现的。也就是说如果想在起动一个Activity或是在一个 Activity中启动另一个Activity,是通过发送Intent消息来触发,而不像Windows WinForm应用,需要调Form示例的Show或是Load方法来实现。通过Intent消息来实现Activity之间的交互,则最大程度上减小了 模块之间的耦合度。这种机制类同Subscriber/Publisher机制。... 全文

Android开发 Android应用 基本概念

Android开发速成简洁教程九:创建应用程序框架

Android简明开发教程八说明了程序需要实现的功能,就可以创建Android项目了。请参见Android简明开发教程三:第一个应用Hello World ,创建一个新项目AndroidGraphics2DTutorial。今天先介绍创建的程序的框架。然后再项目添加如下类定义:... 全文

Android开发 Android应用 创建应用程序框架

Android学习路线(三)运行你的Android应用

如果你按照上一课创建了你的Android项目,那么它包含默认的 "Hello World" 的源文件,能够让你的项目马上运行起来。 你如何运行你的应用以来与两件事:你是否拥有真正的Android设备和你是否使用的是Eclipse。这片课程向你展示如何使用Eclipse和命令行工具来将你的应用安装到真机上和模拟器上。 在你运行你的应用之前,你必须了解一下Android项目中的这些目录文件:... 全文

android应用 android模拟器 开发者 手机 xml

横评:Android VS iPhone应用程序界面对比

Android与iPhone OS孰优孰劣,目前还在争论中,但是不妨我们从开发体验的角度以应用程序界面来对这两个平台进行一个小评测。... 全文

评测 Android开发 iPhone开发 Android应用程序界面 iPhone应用程序界面

Android开发学习之使用ViewPager+PagerTabStrip制作可滑动的Tab

            在昨天的文章中,我们使用ViewPager制作了一个简单的滑动切换的例子。今天让我们在昨天的基础之上,利用ViewPager来制作一个可以滑动的Tab。要实现这样的功能,除了ViewPager外,我们还需要一个PagerTabStrip来配合使用。简单说一下PagerTabStrip,Google官方描述为:PagerTabStrip是当前,未来和以前的页面的交互指标ViewPager。它旨在用作ViewPager插件在XML布局的子图。添加为ViewPager的孩子在你的布局文件,并设置其Android:layout_gravity到顶部或底部的钉选到ViewPager的顶部或底部。从每个页面的标题是由方法提供 getPageTitle(INT)在提供给ViewPager的适配器。这段话的大致意思就是说,PagerTabStrip是一个ViewPager的子控件,不能单独使用。通过layout_gravity属性来控制它显示的位置。使用getPageTitle()方法返回页面的标题。通过对这段话的理解我们可以设计出下面的布局代码:... 全文

viewpager Android应用开发 android开发 android应用 安卓

如何定位Android NDK开发中遇到的错误

Android NDK是什么?Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。NDK包括:从C / C++生成原生代码库所需要的工具和build files;将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中;支持所有未来Android平台的一系列原生系统头文件和库。为何要用到NDK?概括来说主要分为以下几种情况:... 全文

android ndk android开发 android平台 移动应用开发 自动化测试 操作系统 应用程序 编程语言 Testin

Android应用开发

Android应用开发-小巫CSDN博客客户端总结篇2014博客之星投票地址:http://vote.blog.csdn.net/blogstar2014/details?username=wwj_748#content小巫CSDN博客客户端的开发要告一段落了,这个作品已经成功在360、应用宝渠道上线,有兴趣的朋友可以到以下地址下载:360手机助手:http://zhushou.360.cn/detail/index/soft_id/1973215?recrefer=SE_D_%E5%B0%8F%E5%B7%ABCSDN%E5%8D%9A%E5%AE%A2#prev应用宝:http://android.myapp.com/myapp/detail.htm?apkName=com.xiaowu.blogclient本篇博客作为此系列博客的总结篇,是想把自己开发这款应用中所获得的一些经验分享给大家以表感谢那么多朋友对小巫的关注和支持。很多初学者学习Android的时候总会有这种感觉,很想做点什么东西出来,但就是无从下手,也有很多人请教我说如何去学Android,如何去开发一款应用之类的问题。一般我都只是简单的回答是,从简单做起,先把基础掌握之后,然后尝试去实现自己的想法,不要一下子就想把所有细节都想透了,把所有功能都实现了,因为这是不可能的。初学者最怕的就是急躁,想当初我学Android的时候也有过这样的经历,也是从菜鸟过来的,但现在是否成为你们口中的大牛呢,我也不敢说是。因为我自己也有很多不知道不了解的东西,关于更深层次的东西我也还有很多没有涉及到,但是我却可以实现自己的想法,开发自己的产品。从我的博客,大家可以看到小巫开发过以下应用:博客开源的有以下:简美音乐播放器(一款简单入门的音乐播放器)小巫新闻客户端(新闻类客户端开发,包含客户端、服务端开发)浪腾微博客户端(新浪微博、腾讯微博整合客户端开发,开放平台API调用)小巫CSDN博客客户端(CSDN手机客户端,分析html网页,解析html)我也发表很多关于这些客户端的开发,相信大家都可以知道开发一款应用并不是想象得那么难,难的是没有动手之前就被前面的不知所措给阻碍了,所以我建议一些初学者,无须害怕自己没有掌握相关的知识,百度是你最好的老师,遇到不懂的,或者不明白的可以自己尝试去寻找答案,网上很多大牛都很有分享精神,会把一些经验分享给大家,这时你就可以通过学习他们的博文或者请教他们来得到解决方案。我总结了开发这样一款应用需要的一些能力:最基本的Java编程(开发Android应用需要有最基本的Java编程基础和面向对象思维)基础的Android开发知识(包括UI设计,基本控件的使用,4大组件、数据存储、网络请求)搜索解决方案的能力(关键字搜索问题,熟练使用搜索引擎寻找答案)解决问题的能力(如何查看logcat、debug还有定位问题)接入SDK的能力(接入第三方服务,熟悉如何快速集成到自己应用当中)经验总结的能力(善于总结分析问题,类似写文档或者博客记录问题)关于应用,UI可能一开始不能设计得很好看,因为我们开发者大部分都不太会设计,但这没有关系,有很多应用可供我们参考,小巫的一些素材都是通过自己搜集,然后应用到自己的程序中,可以解压缩apk包,获取里面的素材,如果有能力的,也可以自己使用photoShop设计相应的素材或者寻找美工帮忙设计。开始一款应用的开发,需要自己想清楚整个程序的框架,大致已什么样的方向去设计,专业点来说就是需求分析,先把需求确定下来之后,确定基本的交互页面,把整个框架搭建起来之后,就可以开始考虑业务逻辑的实现,比如如何通过网络请求获取数据,以什么样的形式展示数据等。当整体功能需求实现之后,如果有能力的可以尝试优化程序,比如ListView的优化,性能相关的优化,UI界面的优化等等,这些都是属于你在学习过程中需要不断积累的东西。关于小巫CSDN博客客户端的总结大概就这么多,如果各位有其他想跟笔者讨论交流的,可以及时留言,我可以在博客中继续补充。这里预告笔者近期在开发的一款产品,相信不久之后也会跟大家见面,希望能跟大家一起进步,谢谢。... 全文

android csdn博客 android应用

Android应用开发

Android应用开发--MP3音乐播放器Service实现2013年5月29日简、美音乐播放器开发记录让网友们久等啦,关于简、美音乐播放器的开发,最重要的Service类总算是要发博了。关于Android五大组件之一的Service在音乐播放器开发中得到了很好的应用,不仅是Service,广播(Broadcast)、Activity、Content Provider都会在此次开发中用到。所以说对于Android的一个很好的练手项目,音乐播放器是毋庸置疑的。上一篇,主要介绍的是播放界面的业务逻辑实现,不过这些业务逻辑都是以Service为中心的。  package com.wwj.sb.service; import java.util.List; import android.annotation.SuppressLint; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnPreparedListener; import android.os.Handler; import android.os.IBinder; import android.util.Log; import com.wwj.sb.activity.PlayerActivity; import com.wwj.sb.domain.AppConstant; import com.wwj.sb.domain.Mp3Info; import com.wwj.sb.utils.MediaUtil; /*** * 2013/5/25 * @author wwj * 音乐播放服务 */ @SuppressLint("NewApi") public class PlayerService extends Service { private MediaPlayer mediaPlayer; // 媒体播放器对象 private String path; // 音乐文件路径 private int msg; private boolean isPause; // 暂停状态 private int current = 0; // 记录当前正在播放的音乐 private List<Mp3Info> mp3Infos; //存放Mp3Info对象的集合 private int status = 3; //播放状态,默认为顺序播放 private MyReceiver myReceiver; //自定义广播接收器 private int currentTime; //当前播放进度 private int duration; //播放长度 //服务要发送的一些Action public static final String UPDATE_ACTION = "com.wwj.action.UPDATE_ACTION"; //更新动作 public static final String CTL_ACTION = "com.wwj.action.CTL_ACTION"; //控制动作 public static final String MUSIC_CURRENT = "com.wwj.action.MUSIC_CURRENT"; //当前音乐播放时间更新动作 public static final String MUSIC_DURATION = "com.wwj.action.MUSIC_DURATION";//新音乐长度更新动作 /** * handler用来接收消息,来发送广播更新播放时间 */ private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { if (msg.what == 1) { if(mediaPlayer != null) { currentTime = mediaPlayer.getCurrentPosition(); // 获取当前音乐播放的位置 Intent intent = new Intent(); intent.setAction(MUSIC_CURRENT); intent.putExtra("currentTime", currentTime); sendBroadcast(intent); // 给PlayerActivity发送广播 handler.sendEmptyMessageDelayed(1, 1000); } } }; }; @Override public void onCreate() { super.onCreate(); Log.d("service", "service created"); mediaPlayer = new MediaPlayer(); mp3Infos = MediaUtil.getMp3Infos(PlayerService.this); /** * 设置音乐播放完成时的监听器 */ mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { if (status == 1) { // 单曲循环 mediaPlayer.start(); } else if (status == 2) { // 全部循环 current++; if(current > mp3Infos.size() - 1) { //变为第一首的位置继续播放 current = 0; } Intent sendIntent = new Intent(UPDATE_ACTION); sendIntent.putExtra("current", current); // 发送广播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); path = mp3Infos.get(current).getUrl(); play(0); } else if (status == 3) { // 顺序播放 current++; //下一首位置 if (current <= mp3Infos.size() - 1) { Intent sendIntent = new Intent(UPDATE_ACTION); sendIntent.putExtra("current", current); // 发送广播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); path = mp3Infos.get(current).getUrl(); play(0); }else { mediaPlayer.seekTo(0); current = 0; Intent sendIntent = new Intent(UPDATE_ACTION); sendIntent.putExtra("current", current); // 发送广播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); } } else if(status == 4) { //随机播放 current = getRandomIndex(mp3Infos.size() - 1); System.out.println("currentIndex ->" + current); Intent sendIntent = new Intent(UPDATE_ACTION); sendIntent.putExtra("current", current); // 发送广播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); path = mp3Infos.get(current).getUrl(); play(0); } } }); myReceiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(PlayerActivity.CTL_ACTION); registerReceiver(myReceiver, filter); } /** * 获取随机位置 * @param end * @return */ protected int getRandomIndex(int end) { int index = (int) (Math.random() * end); return index; } @Override public IBinder onBind(Intent arg0) { return null; } @Override public void onStart(Intent intent, int startId) { path = intent.getStringExtra("url"); //歌曲路径 current = intent.getIntExtra("listPosition", -1); //当前播放歌曲的在mp3Infos的位置 msg = intent.getIntExtra("MSG", 0); //播放信息 if (msg == AppConstant.PlayerMsg.PLAY_MSG) { //直接播放音乐 play(0); } else if (msg == AppConstant.PlayerMsg.PAUSE_MSG) { //暂停 pause(); } else if (msg == AppConstant.PlayerMsg.STOP_MSG) { //停止 stop(); } else if (msg == AppConstant.PlayerMsg.CONTINUE_MSG) { //继续播放 resume(); } else if (msg == AppConstant.PlayerMsg.PRIVIOUS_MSG) { //上一首 previous(); } else if (msg == AppConstant.PlayerMsg.NEXT_MSG) { //下一首 next(); } else if (msg == AppConstant.PlayerMsg.PROGRESS_CHANGE) { //进度更新 currentTime = intent.getIntExtra("progress", -1); play(currentTime); } else if (msg == AppConstant.PlayerMsg.PLAYING_MSG) { handler.sendEmptyMessage(1); } super.onStart(intent, startId); } /** * 播放音乐 * * @param position */ private void play(int currentTime) { try { mediaPlayer.reset();// 把各项参数恢复到初始状态 mediaPlayer.setDataSource(path); mediaPlayer.prepare(); // 进行缓冲 mediaPlayer.setOnPreparedListener(new PreparedListener(currentTime));// 注册一个监听器 handler.sendEmptyMessage(1); } catch (Exception e) { e.printStackTrace(); } } /** * 暂停音乐 */ private void pause() { if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.pause(); isPause = true; } } private void resume() { if (isPause) { mediaPlayer.start(); isPause = false; } } /** * 上一首 */ private void previous() { Intent sendIntent = new Intent(UPDATE_ACTION); sendIntent.putExtra("current", current); // 发送广播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); play(0); } /** * 下一首 */ private void next() { Intent sendIntent = new Intent(UPDATE_ACTION); sendIntent.putExtra("current", current); // 发送广播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); play(0); } /** * 停止音乐 */ private void stop() { if (mediaPlayer != null) { mediaPlayer.stop(); try { mediaPlayer.prepare(); // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数 } catch (Exception e) { e.printStackTrace(); } } } @Override public void onDestroy() { if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } } /** * * 实现一个OnPrepareLister接口,当音乐准备好的时候开始播放 * */ private final class PreparedListener implements OnPreparedListener { private int currentTime; public PreparedListener(int currentTime) { this.currentTime = currentTime; } @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); // 开始播放 if (currentTime > 0) { // 如果音乐不是从头播放 mediaPlayer.seekTo(currentTime); } Intent intent = new Intent(); intent.setAction(MUSIC_DURATION); duration = mediaPlayer.getDuration(); intent.putExtra("duration", duration); //通过Intent来传递歌曲的总长度 sendBroadcast(intent); } } public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int control = intent.getIntExtra("control", -1); switch (control) { case 1: status = 1; // 将播放状态置为1表示:单曲循环 break; case 2: status = 2; //将播放状态置为2表示:全部循环 break; case 3: status = 3; //将播放状态置为3表示:顺序播放 break; case 4: status = 4; //将播放状态置为4表示:随机播放 break; } } } } 以上的代码要注意的是在Service在被调用startService()方法会在回调onStart(),服务是不会被多次创建的,但会多次调用onStart方法,然而通过Intent传过来的数据,也只能在onStart方法内来接收。似乎关于Service类没什么可说的,简单来说服务是我们看不见的东西,只是在后台不断运行的程序,音乐播放通过服务来实现,才不会在界面不可见的时候停掉,这是音乐播放器使用Service的原因。第一阶段的音乐播放器开发已经到现在全部介绍完,第二阶段会实现歌词的显示和网络相关的下载和搜索,在这一阶段也会对UI进行一些细微的美化,尽量去尝试实现更炫的效果,比如提供主题的切换,界面切换的动画等等。小巫需要继续去学习,然后把所有东西分享给学习Android的朋友们,感谢你们的关注,让我们一起共同学习进步。第二阶段具体会什么时候启动,还没有明确的时间,因为最近开始忙起来了,所以尽情等待吧。哇咔咔... 全文

Android Android应用 音乐 mp3

Android应用开发

Android应用开发--MP3音乐播放器代码实现(一)需求1:将内存卡中的MP3音乐读取出来并显示到列表当中... 全文

ANDROID Android应用 mp3 音乐

iOS、Android应用名称25大高频词:Free上榜

北京时间8月9日消息,据国外媒体报道,移动应用推荐平台App Brain和Appsfire日前分别整理出了Android和iOS应用名称中出现频率最高的词汇并进行了排名。如果Android手机用户在 Google Play 键入“wallpaper”进行搜索的话,就会发现有海量的搜索结果。... 全文

Android应用 iOS应用 移动应用名字高频词 ASO应用商店优化

Android 应用的动画实践

前言尝试搜索了一下android 动画的中文资料,很多都是一些枯燥的翻译api的一些文档,很少有系统讲解如何利用动画开发一个应用的资料,忽然,发现很多应用也不怎么注重动画在app的应用,想了想,自己尝试总结一下吧。因为,本人也不是什么动画制作师,没法把动画做得很绚丽,只好,利用内置的效果,进行简单加工,如何发挥,由各位的创意来定。鉴于,很多有关的android的动画资料里面,都是堆代码的,所以,全部代码均放在了github上面,查看完整代码可以移步到github上面去特地说明一下,由于android 模拟器和录制工具的原因,例子展示中的gif 的抽筋播放效果不等同于实际效果,自己脑补把抽筋的部分去掉... 全文

Android动画 View Animation Android应用

Android应用流畅(Seamlessness)设计

即使你的应用程序是快速且响应灵敏的,但一些设计仍然会给用户造成问题——与其它应用程序或对话框未事先计划的交互,意外的数据丢失,意料之外的阻塞等 等。避免这些问题,有助于理解应用程序运行的上下文和系统的交互过程,而这些又正影响着你的应用程序。简而言之,你应该竭尽全力去开发一个与系统和其它应 用程序流畅交互的应用程序。 一个常见的流畅问题是,一个应用程序的后台处理——例如,一个Service或者BroadcastReceiver——弹出一个对话框来响应一些事件。 这可能看起来没啥大碍,尤其是你在模拟器上单独地构建和测试你的应用程序的时候。然而,当你的应用程序运行在真机上时,有可能你的应用程序在没有获得用户 焦点时后台处理显示了一个对话框。因此,可能会出现在活跃的应用程序后方显示了你的应用程序的对话框,或者从当前应用程序夺取焦点显示了一个对话框,而不 管当前用户正在做什么(例如,正在打电话)。那种行为,对应用程序或用户来说,就不应该出现。 为了避免这些问题,你的应用程序应该使用合适的系统资源来通知用户——Notification类。使用Notification,你的应用程序可以在状态栏显示一个icon来通知用户已经发生的事情,而不是夺取焦点和打断用户。 另一个流畅问题的例子是未能正确实现Activity的onPause()和其它生命周期方法而造成意外丢失了状态或用户数据。又或者,如果你的应用程序 想暴露数据给其它应用程序使用,你应该通过ContentProvider来暴露,而不是(举例)通过一个可读的原始文件或数据库来实现。 这些例子的共同点是它们都应该与系统和其它应用程序协作好。Android系统设计时,就把应用程序看作是一堆松散耦合的组件,而不是一堆黑盒代码。作为开发者来说,允许我们把整个系统看作是更大的组件集合。这有益于我们可以与其它应用程序进行清晰无缝的集成,因此,作为回报,我们应该更好的设计我们的代码。... 全文

Android应用 Android流畅性

Android应用风格不应照抄iOS

苹果iOS平台上之所以有这么优秀的应用,主要得益于苹果官方有一套非常成熟的UI套件和人机交互手册来指导第三方开发者。这样即便你对产品设计、UI交互什么都不懂,按照苹果的官方手册来,也能做出一个看起来不错的App。... 全文

Android应用 UI设计 Android Design

Android应用正确使用扩展SD卡

Android 开发时如何正确获取使用扩展存储路径 先介绍一下Android的存储 在 2.x 版本中,Android设备都是单存储,第三方App写文件,必须申请 WRITE_EXTERNAL_STORAGE 权限; 在4.0之后,Android设备开始有了内置闪存,即 primary storage,并且可以外置SD卡,即 secondary external storage device;... 全文

android android应用 google 存储

简析国内Android应用商店现状(1)

用“雨后春笋”来形容现在国内的Android市场一点不为过,能摆得上桌面的已经有数十款之多。其中,有做论坛出身的老字辈“安卓市场”、“安智市场”和“机锋市场”,也有依托PC客户端的后起之秀“掌上应用汇”、“91手机助手”,还有大门户旗下的“3G安卓市场”、“QQ手机软件管理”,以及运营商背景的“MM”……百花争艳的背后,哪个Market能带量?哪个产品做得好?哪个运营做得好?(作者本文作于清明节期间,相关数据皆截止于清明节假期)。一、 数据:... 全文

Android Market 应用商店 Android

如何为你的Android应用缩放图片

很难为你的应用程序得到正确的图像缩放吗?是你的图片过大,造成内存问题?还是图片不正确缩放造成不良用户体验的结果?为了寻求一个好的解决方案,我们咨询了Andreas Agvard(索尼爱立信软件部门),让他分享一些关于这方面的经验。... 全文

Android开发 Android应用 缩放图片

2 3 4 5 6 7 8 9 10 11