求大神给个android 音乐播放器本地视频播放器源码

您所在的位置: &
Android SurfaceView播放视频源码
Android SurfaceView播放视频源码
先来介绍一下大部分软件如何解析一段视频流。首先它需要先确定视频的格式,这个和解码相关, 不同的格式视频编码不同,不是这里的重点。知道了视频的编码格式后,再通过编码格式进行解码,最后得到一帧一帧的图像,并把这些图像快速的显示在界面上, 即为播放一段视频。SurfaceView在Android中就是完成这个功能的。
SurfaceView
先来介绍一下大部分软件如何解析一段视频流。首先它需要先确定视频的格式,这个和解码相关, 不同的格式视频编码不同,不是这里的重点。知道了视频的编码格式后,再通过编码格式进行解码,最后得到一帧一帧的图像,并把这些图像快速的显示在界面上, 即为播放一段视频。SurfaceView在Android中就是完成这个功能的。
既然SurfaceView是配合MediaPlayer使用的,MediaPlayer也提供了相应的方法设置SurfaceView显示图片,只需要为MediaPlayer指定SurfaceView显示图像即可。它的完整签名如下:
void setDisplay(SurfaceHolder&sh)
它需要传递一个SurfaceHolder对象,SurfaceHolder可以理解为SurfaceView装载需要显示的一帧帧图像的容器,它可以通过SurfaceHolder.getHolder()方法获得。
使用MediaPlayer配合SurfaceView播放视频的步骤与播放使用MediaPlayer播放MP3大体一致,只需要额外设置显示的SurfaceView即可。
SurfaceView双缓冲
上面有提到,SurfaceView和大部分视频应用一样,把视频流解析成一帧帧的图像进行 显示,但是如果把这个解析的过程放到一个线程中完成,可能在上一帧图像已经显示过后,下一帧图像还没有来得及解析,这样会导致画面的不流畅或者声音和视频 不同步的问题。所以SurfaceView和大部分视频应用一样,通过双缓冲的机制来显示帧图像。那么什么是双缓冲呢?双缓冲可以理解为有两个线程轮番去 解析视频流的帧图像,当一个线程解析完帧图像后,把图像渲染到界面中,同时另一线程开始解析下一帧图像,使得两个线程轮番配合去解析视频流,以达到流畅播 放的效果。
SurfaceHolder
SurfaceView内部实现了双缓冲的机制,但是实现这个功能是非常消耗系统内存的。因为移动设备的局限性,Android在设计的时候规 定,SurfaceView如果为用户可见的时候,创建SurfaceView的SurfaceHolder用于显示视频流解析的帧图片,如果发现 SurfaceView变为用户不可见的时候,则立即销毁SurfaceView的SurfaceHolder,以达到节约系统资源的目的。
如果开发人员不对SurfaceHolder进行维护,会出现最小化程序后,再打开应用的时候,视频的声音在继续播放,但是不显示画面了的情况,这 就是因为当SurfaceView不被用户可见的时候,之前的SurfaceHolder已经被销毁了,再次进入的时候,界面上的 SurfaceHolder已经是新的SurfaceHolder了。所以SurfaceHolder需要我们开发人员去编码维护,维护 SurfaceHolder需要用到它的一个回调,SurfaceHolder.Callback(),它需要实现三个如下三个方法:
void surfaceDestroyed(SurfaceHolder holder):当SurfaceHolder被销毁的时候回调。
void surfaceCreated(SurfaceHolder holder):当SurfaceHolder被创建的时候回调。
void surfaceChange(SurfaceHolder holder):当SurfaceHolder的尺寸发生变化的时候被回调。
以下是这三个方法的调用的过程,在应用中分别为SurfaceHolder实现了这三个方法,先进入应用,SurfaceHolder被创建,创建 好之后会改变SurfaceHolder的大小,然后按Home键回退到桌面销毁SurfaceHolder,最后再进入应用,重新 SurfaceHolder并改变其大小。
SurfaceView的Demo示例
上面讲了那么多关于SurfaceView的内容,下面通过一个Demo简单演示一下 SurfaceView如何播放视频,加了一个滚动条,用于显示进度,还可以拖动滚动条选择播放位置,Demo的注释比较完整,这里不再累述,视频是在网 上随便找的,朋友们运行的时候保证/sdcard/ykzzldx.mp4,这个目录下有这个文件。
布局文件:activity_main.xml
实现代码:
package&cn.bgxt.&&&import&java.io.F&&&import&android.media.AudioM&import&android.media.MediaP&import&android.media.MediaPlayer.OnCompletionL&import&android.media.MediaPlayer.OnErrorL&import&android.media.MediaPlayer.OnPreparedL&import&android.os.B&import&android.app.A&import&android.util.L&import&android.view.SurfaceH&import&android.view.SurfaceHolder.C&import&android.view.SurfaceV&import&android.view.V&import&android.widget.B&import&android.widget.EditT&import&android.widget.SeekB&import&android.widget.SeekBar.OnSeekBarChangeL&import&android.widget.T&&&public&class&MainActivity&extends&Activity&{&private&final&String&TAG&=&&main&;&private&EditText&et_&private&SurfaceView&&private&Button&btn_play,&btn_pause,&btn_replay,&btn_&private&MediaPlayer&mediaP&private&SeekBar&seekB&private&int&currentPosition&=&0;&private&boolean&isP&&&@Override&protected&void&onCreate(Bundle&savedInstanceState)&{&super.onCreate(savedInstanceState);&setContentView(R.layout.activity_main);&&&seekBar&=&(SeekBar)&findViewById(R.id.seekBar);&sv&=&(SurfaceView)&findViewById(R.id.sv);&et_path&=&(EditText)&findViewById(R.id.et_path);&&&btn_play&=&(Button)&findViewById(R.id.btn_play);&btn_pause&=&(Button)&findViewById(R.id.btn_pause);&btn_replay&=&(Button)&findViewById(R.id.btn_replay);&btn_stop&=&(Button)&findViewById(R.id.btn_stop);&&&btn_play.setOnClickListener(click);&btn_pause.setOnClickListener(click);&btn_replay.setOnClickListener(click);&btn_stop.setOnClickListener(click);&&&&sv.getHolder().addCallback(callback);&&&&&seekBar.setOnSeekBarChangeListener(change);&}&&&private&Callback&callback&=&new&Callback()&{&&@Override&public&void&surfaceDestroyed(SurfaceHolder&holder)&{&Log.i(TAG,&&SurfaceHolder&被销毁&);&&if&(mediaPlayer&!=&null&&&&mediaPlayer.isPlaying())&{&currentPosition&=&mediaPlayer.getCurrentPosition();&mediaPlayer.stop();&}&}&&&@Override&public&void&surfaceCreated(SurfaceHolder&holder)&{&Log.i(TAG,&&SurfaceHolder&被创建&);&if&(currentPosition&&&0)&{&&play(currentPosition);&currentPosition&=&0;&}&}&&&@Override&public&void&surfaceChanged(SurfaceHolder&holder,&int&format,&int&width,&int&height)&{&Log.i(TAG,&&SurfaceHolder&大小被改变&);&}&&&};&&&private&OnSeekBarChangeListener&change&=&new&OnSeekBarChangeListener()&{&&&@Override&public&void&onStopTrackingTouch(SeekBar&seekBar)&{&&&int&progress&=&seekBar.getProgress();&if&(mediaPlayer&!=&null&&&&mediaPlayer.isPlaying())&{&&mediaPlayer.seekTo(progress);&}&}&&&@Override&public&void&onStartTrackingTouch(SeekBar&seekBar)&{&&&}&&&@Override&public&void&onProgressChanged(SeekBar&seekBar,&int&progress,&boolean&fromUser)&{&&&}&};&&&private&View.OnClickListener&click&=&new&View.OnClickListener()&{&&&@Override&public&void&onClick(View&v)&{&&&switch&(v.getId())&{&case&R.id.btn_play:&play(0);&break;&case&R.id.btn_pause:&pause();&break;&case&R.id.btn_replay:&replay();&break;&case&R.id.btn_stop:&stop();&break;&default:&break;&}&}&};&&&&&&&&protected&void&stop()&{&if&(mediaPlayer&!=&null&&&&mediaPlayer.isPlaying())&{&mediaPlayer.stop();&mediaPlayer.release();&mediaPlayer&=&null;&btn_play.setEnabled(true);&isPlaying&=&false;&}&}&&&&&&&&protected&void&play(final&int&msec)&{&&String&path&=&et_path.getText().toString().trim();&File&file&=&new&File(path);&if&(!file.exists())&{&Toast.makeText(this,&&视频文件路径错误&,&0).show();&return;&}&try&{&mediaPlayer&=&new&MediaPlayer();&mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);&&mediaPlayer.setDataSource(file.getAbsolutePath());&&mediaPlayer.setDisplay(sv.getHolder());&Log.i(TAG,&&开始装载&);&mediaPlayer.prepareAsync();&mediaPlayer.setOnPreparedListener(new&OnPreparedListener()&{&&&@Override&public&void&onPrepared(MediaPlayer&mp)&{&Log.i(TAG,&&装载完成&);&mediaPlayer.start();&&mediaPlayer.seekTo(msec);&&seekBar.setMax(mediaPlayer.getDuration());&&new&Thread()&{&&&@Override&public&void&run()&{&try&{&isPlaying&=&true;&while&(isPlaying)&{&int&current&=&mediaPlayer&.getCurrentPosition();&seekBar.setProgress(current);&sleep(500);&}&}&catch&(Exception&e)&{&e.printStackTrace();&}&}&}.start();&&&btn_play.setEnabled(false);&}&});&mediaPlayer.setOnCompletionListener(new&OnCompletionListener()&{&&&@Override&public&void&onCompletion(MediaPlayer&mp)&{&&btn_play.setEnabled(true);&}&});&&&mediaPlayer.setOnErrorListener(new&OnErrorListener()&{&&&@Override&public&boolean&onError(MediaPlayer&mp,&int&what,&int&extra)&{&&play(0);&isPlaying&=&false;&return&false;&}&});&}&catch&(Exception&e)&{&e.printStackTrace();&}&&&}&&&&&&protected&void&replay()&{&if&(mediaPlayer&!=&null&&&&mediaPlayer.isPlaying())&{&mediaPlayer.seekTo(0);&Toast.makeText(this,&&重新播放&,&0).show();&btn_pause.setText(&暂停&);&return;&}&isPlaying&=&false;&play(0);&&&}&&&&&&protected&void&pause()&{&if&(btn_pause.getText().toString().trim().equals(&继续&))&{&btn_pause.setText(&暂停&);&mediaPlayer.start();&Toast.makeText(this,&&继续播放&,&0).show();&return;&}&if&(mediaPlayer&!=&null&&&&mediaPlayer.isPlaying())&{&mediaPlayer.pause();&btn_pause.setText(&继续&);&Toast.makeText(this,&&暂停播放&,&0).show();&}&&&}&&&}&
源码下载地址 :
原文地址: 【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
Android Wear自上市以来褒贬不一,使得谷歌公司成为可移动穿戴设
既然强大的Android Studio来了,有什么理由不去用呢?
讲师: 17人学习过讲师: 48人学习过讲师: 132人学习过
iOS从最初的惊艳到后来的成熟,再到现在的转变,被誉
日-6日,GMIC 北京 2014全球移动互联网大会
日-6日,GMIC 北京 2014全球移动互联网大会
本书全面系统地概括了计算机网络的基本理论,详细阐述了OSI模型与网络协议、网络规划与综合布线、对等网络与服务器/客户端网络、
Windows Phone专家
Android开发专家
51CTO旗下网站Android相关信息
?相关Android文章推荐
热门Android文章推荐
config_statusBarComponent" trans
首先设置只能输入数字: [html] Ed
阅读Android 4.0源码也有一段时间
最近做项目要用到IPHONE 左右滑动
SurfaceView 示波器的例子:直接上
在android应用程序中,有时要用到
属性名称 描述 android:columnWidt
1.判断SIM卡状态 package com.zeph
横线渐变色 [html] ?xml version="
说到GridView Listview一定会提到
广告赞助商
Android文章阅读排
在Android本地视频播放器开发
摘要:在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片、标题、时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获取到视频后,那么接下来就是解码视频,解码视频我使用
在Android本地视频播放器开发中的本地视频章节中,我们能够本地视频并且显示每个视频的图片、标题、时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获取到视频后,那么接下来就是解码视频,解码视频我使用的是ffmpeg,所以这张就是使用NDK编译手机可以使用的FFmpeg库。
NDK=/opt/android-ndk-r8d
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
LOCAL_ARM_NEON=true
CPU=armv7-a
OPTIMIZE_CFLAGS=&-mfloat-abi=softfp -mfpu=neon -marm -mcpu=cortex-a8&
PREFIX=./android/$CPU
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--arch=arm \
--enable-nonfree \
--enable-asm \
--cpu=cortex-a8 \
--enable-neon \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=& -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 $OPTIMIZE_CFLAGS & \
--disable-shared \
--enable-static \
--extra-ldflags=&-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog& \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-swscale \
--disable-swresample \
--enable-avformat \
--enable-avcodec \
--disable-optimizations \
--disable-debug \
--disable-doc \
--disable-stripping \
--enable-pthreads \
--disable-yasm \
--enable-zlib \
--enable-pic \
--enable-small
make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg-neon.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg-neon.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
NDK=/opt/android-ndk-r8d
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
LOCAL_ARM_NEON=true
CPU=armv7-a
OPTIMIZE_CFLAGS=&-mfloat-abi=softfp -mfpu=neon -marm -mcpu=cortex-a8&
PREFIX=./android/$CPU
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--arch=arm \
--enable-nonfree \
--enable-asm \
--cpu=cortex-a8 \
--enable-neon \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=& -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 $OPTIMIZE_CFLAGS & \
--disable-shared \
(原文出处:吾吾织梦)
------分隔线----------------------------
◎ 广告赞助
◎ 阅读说明READ EXPLANATION
推荐使用第三方专业下载工具下载本站软件,使用 WinRAR v3.10 以上版本解压本站软件。
本站空间有限.资源到网盘下载.谢谢&& 赞助本站(广告),联系站长QQ&&
为加快源码更新本站源码未全部调试.所以有关源码问题请到交流,讨论,
如须购买金币(升级VIP)&本站解压密码
下载本站资源,如果服务器暂不能下载请过一段时间重试!
如果遇到什么问题,请到本站论坛去咨寻,我们将在那里提供更多 、更好的资源!
本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。视频播放器下载,视频播放软件 - A5源码
关键字:    
当前位置: >
视频播放推荐
视频播放排行
<font color='#ff-06-12
PotPlayer是由 KMPlayer 的原作者姜勇希在跳槽到 Daum 公司后使用 C++ 完全重写的播放器。它基本上继承了 KMPlayer 方便的滤镜以及外挂式的管理系统。同时简化了内部的解码器体系。现在基本依靠 Bass 和 FFmpeg 系滤镜解决播放问题。同时 PotPlayer 还完成了...
Flash Player的独立播放器版(Debug版) ,既可单独播放*.SWF文件,也可创建EXE文件。Debug版适用于开发人员。同时,它也是独立播放器,运行后,程序会自动关联SWF文件,做为默认的播放器。 Flash Player能够播放小又快速的多媒体动画,以及交互式的动画、飞行...
快播 v5.21.543官方版
快播Qvod AV播放器是一款基于准视频点播(QVOD)内核的、多功能、个性化的播放器软件。 快播集成了全新播放引擎,不但支持自主研发的准视频点播技术,而且还是免费的 BT 点播软件,用户只需通过几分钟的缓冲即可直接观看丰富的 BT 影视节目。快播具有的资源占用...
Adobe Flash Player(Flash Player官方下载)是一个集成的多媒体播放器,让你在Web上享受更广泛的多媒体体验。Flash Player官方版可显示和播放多媒体内容,从数以千计的高度交互性的flash player下载,到有音频流要求的多媒体用户界面,包括实况音乐会和广播。...
暴风影音5官方下载(暴风影音播放器) v5.49.0528
暴风影音5是一款绿色万能的视频播放器,支持avi\rm\rmvb 等常用主流媒体格式,也支持*.mkv\*.tp\*.ts等高清视频格式,兼容realplayer,kmplayer等主流播放软件,集flash播放器、电影播放器、高清播放器于一身的全能播放器。 暴风影音 5.09. 【更新时...
呆呆播放器(Dplayer) 提供高清电影及电视剧的免费在线点播,支持网络电视、在线电影点播、免费电影下载、在线网络电视、边下边看。呆呆高清播放器采用全球最先进的P2P点播技术,即点即看,高速流畅,高清晰度,上万部免费电影、网络电视、动漫综艺,每日更...
Flash Player的独立播放器版(Debug版), 既可单独播放*.SWF文件,也可创建EXE文件。Debug版适用于开发人员。同时,它也是独立播放器,运行后,程序会自动关联SWF文件,做为默认的播放器。 Flash Player能够播放小又快速的多媒体动画,以及交互式的动画、飞行...
KMPlayer以其强大的操控功能在众多免费播放器中逐渐显示出其强大的开发实力。KMPlayer底层调用WMP的内核DirectShow、外部同时支持临时挂接Windows下的全部解码器。通过各种插件扩展KMP可以支持层出不穷的新格式。另外其拥有强大的插件功能、能够直接使用wina...
爱奇艺万能播放器是爱奇艺出品的一款追求极致体验的万能影音播放器。小巧的安装包,支持大多数媒体格式,操作简单,性能卓越。 更新日志 1.爱奇艺奇速影音更名为爱奇艺万能播放器 2.全屏界面改版 3.增加字幕描边效果 4.增加音频播放界面 5.增加画面旋转记忆...
天王影音播放器 是一款免费的视频播放器,不仅支持本地视频播放还支持p2p点播,P2P加速点播可以极大加快用户点播速度,边下载边上传。 天王影音播放器功能特色: 1、永久免费 点播、搜索、收藏、高速下载,统统免费提供 2、安全极速 领先的双核搜索技术,智能...
人人播放器 是一款 免费的视频播放器 ,完美支持avi,wmv,rmvb,hdv等视频格式。 体积更小巧 占用资源更少 渲染更快速 播放更流畅 完美支持avi, wmv, rmvb, hdv 等视频格式...
影音先锋 是一款基于DirectShow和DirectSound基础之上自主开发的播放内核,具有资源占用低、运行效率高、扩展性强、支持格式广等优点。并集成了RealPlayer、QuickTime Player等多种播放核心。完美的亮度、对比度、饱和度、色度调节功能,支持影音先锋支持的所...
我看吧播放器(mkanbaPlayer)是一款基于,提供最新电影、电视剧、动漫、综艺等节目以西瓜影音,吉吉影音内核多内核的,在线直播及本地播放于一体的全能影院播放器。运用自主研发的多核心P4P技术 使用主流媒体传输协议,率先实现了高清视频在互联网络的流畅播...
维棠播放器是维棠科技旗下PC端视频播放器。软件小巧、极速、强大、易用。音视频格式全面支持,flv、mp3、mp4、mkv、avi、mpeg等音视频格式尽收入阆中,海量格式随意播放。简单易用,和维棠配合使用更佳。 维棠播放器软件特色: 轻巧播放器,安装包小,占用内...
百度影音是百度公司最新推出的一款全新体验的播放器。百度影音支持主流媒体格式的视频、音频文件,实现本地播放和在线点播。百度影音将不断完善产品性能、产品体验及产品功能。让它成为您休闲娱乐的伙伴,让您的工作与生活充满乐趣,为您提供优秀的视听服务...
AVI播放精灵 支持多种格式的视频音频文件,包括AVI,SWF, DAT,MPEG,DivX,XviD,WMV,ASF,MP4,FLV,MKV,MP3等。...
K-Lite Mega Codec Pack是解码器包的鼻祖,是K-Lite Codec Pack Full+Real Alternative的集成包,它将网络上常见的影音编码程式全部收集于一身,你只需要安装它,就可以利用Windows Media Player,BSplayer,kmplayer或其他常见的影片播放程序观赏这些格式的...
VLC Media Player 可以播放 MPEG-1、MPEG-2、MPEG-4、DivX、DVD/VCD、数字卫星频道、数字地球电视频道(digital terrestial television channels)、在许多作业平台底下透过宽频 IPv4、IPv6 网络播放线上影片;此软件开发项目是由法国学生所发起的,参与者来...
Avx云播盒子 (AvxYunPlayer)集成目前网上最流行的云点播引擎加ed2k、magnet资源搜索引擎!五大搜索引擎加两大云点播引擎,实现真正的随拖随放 Avx云播盒子功能特点: 采用多线程搜索技术,使搜索更快速,不屏蔽任何关键字,使你能搜索到你想要的任何资源,同...
增值电信业务经营许可证:苏B2-CopyRight &#169;
All Rights reserved.【干货巴25期】6.16!
为了让每一位巴友,每天都有最新的干货品尝,【安卓巴士】 推
在前不久的谷歌2015 I/O大会上,发布了Android新版本M,貌似从这个版本开始Android不
华为云存储新品上线,挑战一切云存储,不服来辩!~
我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程
要明白这个流程,我们还得从第一部开始,大家都知道 在activity里面 setcontentview
Build Variants当我们在项目里配置了productFlavors后,支持多渠道和多APK打包,但我
Android源码大放送之material design类型
鉴于大家对源码的渴望,就算自己辛苦一点也
通过jsoup抓取车站信息
有时候你应用程序的布局可能让应用运行缓慢。为了帮助调试布局中的问题,Android SDK
可以识别多种证件,源码在二楼
最近闲着没事,总是想想做点什么。在时间空余之时给大家说说MVC设计思想在Android开发
安客学院查看全部课程丨免费、供下载>>
安卓巴士沙龙(北京站)视来自:
Android studio视频教程来自:
安卓巴士沙龙(上海站)视来自:
Android的面向对象技术来自:
android架构之设计模式介来自:
android架构之EIT介绍来自:
android架构师需要掌握的O来自:
Cocos2d-x概要来自:
了解Cocos2d-x整个引擎框来自:
Cocos2d-x坐标系统来自:
安客电子书
来源:Android学习电子书
来源:Android学习电子书
来源:Android学习电子书
来源:Android学习电子书
开发者服务
1000+免费服务&&
开发者仅需10分钟即可集成到自己的APP中,支持包括QQ、微信、新浪微博、腾讯微博、开心网
Android开发资料
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
[学习教程]
Android开发专题
之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断
前几天看到qq游戏大厅中的按照椭圆轨迹转动的效果,就仿照做了一个,原理应该
Android开发专栏
微信的朋友圈布局,这个布局很有意思,拿来学习,绝对是不错的货源码下载:/forum.php?mod=viewthread&tid=242978更多学习请点击:/site/getdocs
Android Studio中加入ActionBar-PullToRefresh最简单的方式是通过Gradle自动下载类库,配置文件build.gradle中只需加载如下内容即可:repositories {
mavenCentral()
dependencies {
compile 'com.github.chrisbanes.actionbarpulltorefresh:extra-abc:+'
}另一种方式
转自&http://blog.csdn.net/zhang31jian/article/details/处理前处理后上代码/**&&&&&&*&怀旧效果&&&&&*&@param&bmp&&&&&&*&@return&&&&
【导读】OneAPM推出新一代移动端性能监控产品Mobile Insight, 能够帮助企业实时监测移动应用的真实用户体验,实现端到端的应用性能分析。并且Mi可以深入到代码级进行应用性能问题剖析,通过可视化界面展示智能移动终端的实时运行状态,从而能够快速定位各种问题,并能够有效预防
大家好,今天为大家带来一个新东西:Bmob的支付接口支付接口是Bmob为广大开发人员提供的统一、正规的收费手段,让没有企业认证的个人开发者,也能通过支付宝和微信向用户收费。看完该实例可以让您快速为自己的应用接入Bmob的支付功能。实例项目是展示一张图片的20%,然后用户通过
转载自http://blog.csdn.net/sjf0115/article/details/7266998处理前处理后/**&&&&&&*&模糊效果&&&&&&*&@param&bmp&&&&&&*&@return&&&&&nbs
今天在网上看了点资料自己也做个小记录以便学习。。。1、首先新建一个ImageView类package com.example.import android.content.Cimport android.content.res.TypedAimport android.graphics.Bimport android.graphics.BitmapSimport android.graphic
全国最大android代码分享基地!
16万个安卓开发教程在等1个你!
应有尽有,新手必备!!
找到志同道合安客帮派,最纯粹的交流天地
交流心得,记录开发历程的地方
解答,只是为了延续过去被帮助的感动~
学会才是你的!不然统统别人滴!授之以鱼不如授之以渔!
今日头条 /1
6月27日,安卓巴士沙龙将来到成都 ,是否已经期待很久了呢?成都的会员们,期待怎样的精彩内容会在成都上演呢??我们拭目以待,点击查看详情报名!
Powered by

我要回帖

更多关于 android 音乐播放器 的文章

 

随机推荐