- 浏览: 105409 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
求知者long:
测试证书:https://www.washington.edu ...
Android Https请求详细demo -
liuhui880417:
你这个证书是本地写死到assert路径下的,安全吗?我觉得本地 ...
Android Https请求详细demo -
BigBird2012:
initSSLWithHttpClinet 这个方法在哪里?
Android Https请求详细demo -
stone02111:
CustomParameter.ENCODECustomPar ...
地图选择及地图偏移解决方案(二) -
laizhiming1989:
直接 buff.replaceAll("[^\u4E ...
java中 去除 字符串里面 所有非汉字内容
Jamendo的播放界面做的很不错,如下图:
中间那四个按钮加入了透明度渐变动画,点击桌面会出现这四个Button
中间那个背景的下方还使用了倒影,效果看起来很不错
最后就是使用了SlidingDrawer这几方面都可以学习下。
先说下那四个按钮的布局
<RelativeLayout android:id="@+id/FourWayMediaLayout" android:layout_height="300dip" android:layout_width="300dip" android:background="@null" android:layout_centerHorizontal="true" android:layout_alignTop="@id/ReflectableLayout"> <ImageButton android:id="@+id/PlayImageButton" android:background="@null" android:src="@drawable/player_play_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="10dip" android:layout_alignParentTop="true" android:visibility="gone"></ImageButton> <ImageButton android:id="@+id/StopImageButton" android:background="@null" android:src="@drawable/player_stop_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginBottom="10dip" android:layout_alignParentBottom="true" android:visibility="gone"></ImageButton> <ImageButton android:id="@+id/NextImageButton" android:background="@null" android:src="@drawable/player_next_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginRight="10dip" android:layout_alignParentRight="true" android:visibility="gone"></ImageButton> <ImageButton android:id="@+id/PrevImageButton" android:background="@null" android:src="@drawable/player_prev_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dip" android:layout_alignParentLeft="true" android:visibility="gone"></ImageButton> </RelativeLayout>
fade_in.xml 位置在Res/anmi文件夹下面,我们看到其实即使定义了动画中的alpha通过设置透明度来实现,fade_in.xml主要是从无到有的渐变过程
<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="bottom" android:fillAfter="false"> <alpha android:fromAlpha="0" android:toAlpha="1.0" android:startOffset="400" android:duration="400" /> </set>
fade_out.xml 主要是从有到无的渐变过程
<set xmlns:android="http://schemas.android.com/apk/res/android" android:zAdjustment="bottom" android:fillAfter="false"> <alpha android:fromAlpha="1.0" android:toAlpha="0" android:duration="400" /> </set>
之后就是在代码中通过定义监听器
private ImageButton mPlayImageButton; private ImageButton mNextImageButton; private ImageButton mPrevImageButton; private ImageButton mStopImageButton; ,............................. private Animation mFadeInAnimation; private Animation mFadeOutAnimation; ............................... mFadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in); mFadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out); mFadeOutAnimation.setAnimationListener(new AnimationListener(){ @Override public void onAnimationEnd(Animation animation) { setMediaGone(); } @Override public void onAnimationRepeat(Animation animation) { // nothing here } @Override public void onAnimationStart(Animation animation) { setFadeOutAnimation(); } }); mFadeInAnimation.setAnimationListener(new AnimationListener(){ @Override public void onAnimationEnd(Animation animation) { new Handler().postDelayed(new Runnable(){ @Override public void run() { if(mFadeInAnimation.hasEnded())//judge whether the fadeInAnimation is ended mPlayImageButton.startAnimation(mFadeOutAnimation); } }, 7500); } @Override public void onAnimationRepeat(Animation animation) { // nothing here } @Override public void onAnimationStart(Animation animation) { setMediaVisible(); } }); /** * Makes 4-way media visible */ private void setMediaVisible(){ mPlayImageButton.setVisibility(View.VISIBLE); mNextImageButton.setVisibility(View.VISIBLE); mPrevImageButton.setVisibility(View.VISIBLE); mStopImageButton.setVisibility(View.VISIBLE); } /** * Makes 4-way media gone */ private void setMediaGone(){ mPlayImageButton.setVisibility(View.GONE); mNextImageButton.setVisibility(View.GONE); mPrevImageButton.setVisibility(View.GONE); mStopImageButton.setVisibility(View.GONE); } /** * Sets fade out animation to 4-way media */ private void setFadeOutAnimation(){ mPlayImageButton.setAnimation(mFadeOutAnimation); mNextImageButton.setAnimation(mFadeOutAnimation); mPrevImageButton.setAnimation(mFadeOutAnimation); mStopImageButton.setAnimation(mFadeOutAnimation); } mFadeInAnimation); mStopImageButton.setAnimation(mFadeInAnimation); } /** * Sets fade out animation to 4-way media */ private void setFadeInAnimation(){ mPlayImageButton.setAnimation(mFadeInAnimation); mNextImageButton.setAnimation(mFadeInAnimation); mPrevImageButton.setAnimation(
从以上代码中,可以看出其实使用动画的步骤其实还是很容易的:
1.定义动画xml文件,可以是透明度,移位,缩放OR 旋转等动画效果
2.调用AnimationUtils的loadAnimation方法来加载动画xml文件
mFadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in);
mFadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out);
3.给需要动画显示效果的控件加上动画
mPlayImageButton.setAnimation(mFadeOutAnimation);
...........
下面说说布局中那个image倒影的实现:
代码中写了了两个自定义View,分别继承自LiearLayout和ImageView
public class ReflectableLayout extends RelativeLayout
public class ReflectiveSurface extends ImageView
其中ReflectableLayout里面存放有两个继承自ImageView的RemoteImageView
下面分析怎么实现倒影的
其实步骤很简单,只要在ReflectiveSurface里面传入经过处理变换的canvas然后调用ReflectableLayout的Ondraw方法就可以
所谓处理其实就是进行一个坐标变化然后调用scale(1f,-1f)进行绘制
具体实现代码如下:
protected void onDraw(Canvas canvas) { if(mReflectableLayout == null){ super.onDraw(canvas); return; } // reflect & copy canvas.translate(0, mReflectableLayout.getHeight());//先把坐标点移自ReflectiveSurface画布的起点 canvas.scale(1f, -1f);//-1表示方向相反 // render mReflectableLayout.draw(canvas);//传入经过处理的Canvas super.onDraw(canvas); }
protected void onDraw(Canvas canvas) { super.onDraw(canvas);//对传过来的Canvas进行绘制 if(mReflectiveImageView == null) return; // We need to notify ImageView to redraw itself mReflectiveImageView.postInvalidate(); }
这里面由于canvas的相对原点是针对要绘制的widget而言,因此,如果想在ReflectiveSurface里进行绘制,必须通过translate进行变换
以上
发表评论
-
Android Https请求详细demo
2014-11-06 18:26 16477Android Https详细请求全方案实现, ... -
Android Interpolators
2012-12-26 18:12 1106Android Interpolators 定义动 ... -
android系统给进程分配内存情况(4.0 ics)
2012-12-25 13:21 2114android系统给进程分配内存情况(4.0 ics) ... -
地图选择及地图偏移解决方案(三)
2012-09-25 17:43 2263(转)如何在Android真 ... -
怎样使一个Android应用不被杀死?(整理)
2012-06-13 23:27 0怎样使一个Android应用不被杀死?(整理) ... -
android面试汇总(百度+360+Tencent+淘宝+Qualcomm+HTC)
2012-06-13 23:21 2548汇总自己经历了一些来自百度,360 ,淘宝,腾讯,高通中国, ... -
一个体现Java接口及工厂模式优点的例子
2012-01-04 23:29 1020一个体现Java接口及工 ... -
点击Dialog中的按钮不关闭窗口的实现方法
2011-07-22 12:00 8962阅读评论 在Android实际开发中,我们可能常常需 ... -
(转)java中byte转换int时为何与0xff进行与运算
2011-04-04 15:26 1707[转]java中byte转换int时 ... -
读取zip文件中xml文件
2011-03-09 23:26 4962package com.oppo; import ... -
Android 应用程序获得版本号
2011-01-26 20:27 2824/** * Retrieves application ... -
Dom4j 解析及遍历XML 解决SQL硬编码
2011-01-26 12:59 1690在进行应用程序开发特别是一些主要以查询数据库为主的应用时 ... -
Jamendo开源在线音乐播放器源码分析之主界面显示Adapter之功劳
2011-01-20 23:03 1967今天分析下主界面的 ... -
Android Jamendo源码 图片缓存实现
2011-01-20 22:30 4565Jamendo 代码Image缓存实现: package ... -
android在线音乐Jamendo学习之application全局变量
2011-01-20 21:50 2082在Jamendo程序中,有一个很明显的特征是存在一个全局的Ja ... -
Jamendo开源在线音乐播放器源码分析之Music搜索实现机制
2011-01-15 22:52 2010今天主要分析音乐搜索这部分的实现机制 Ja ... -
Jamendo开源在线音乐播放器源码分析之简介
2011-01-15 22:14 3996Jamendo android在线音乐播放器简介 ...
相关推荐
总的来说,研究jamendo音乐播放器的源码不仅可以提升你的编程技能,还能让你深入了解一个完整的音乐播放应用是如何工作的,为你的软件开发生涯提供宝贵的实践经验。无论你是初学者还是有经验的开发者,都能从中...
通过分析这个开源项目,开发者不仅可以学习到Android应用的基本开发流程,还能深入了解音乐播放器的实现细节,例如如何处理音频流、如何优化音乐加载和播放性能、如何设计用户友好的界面等。此外,对于希望扩展或...
本资源提供的是一个基于Android系统的在线音乐播放器的完整源码,名为"telecapoland-jamendo-android-v1.0.0b-35-g847ba33",这将有助于开发者深入理解音乐播放器应用的开发过程和相关技术。 首先,我们来探讨一下...
《Android应用源码解析:深度探索jamendo开源在线音乐项目》 在移动设备的世界里,Android应用程序以其开放性和灵活性赢得了广大开发者和用户的喜爱。而开源项目更是为开发者提供了丰富的学习资源,它们展示了实际...
4. **UI组件和布局**:源码中会包含各种XML布局文件,展示了如何使用Android的View和 ViewGroup 创建丰富的用户界面,包括音乐列表、播放控制界面等。 5. **数据存储**:为了缓存音乐信息和播放状态,项目可能使用...
【Android源码解析——jamendo开源在线音乐应用】 在安卓(Android)开发领域,了解和研究源码是提升技能、优化应用性能的重要途径。这里我们关注的是“jamendo”项目,一个开源的在线音乐应用程序,它允许用户免费...
《Android源码学习:探索jamendo开源在线音乐应用》 在Android开发领域,源码学习是一种深入理解系统工作原理和提升编程技能的重要途径。本文将围绕"应用源码之jamendo-开源在线音乐.zip"这一主题,探讨如何通过...
《安卓Android源码分析——以telecapoland-jamendo-android-6cd07fb开源音乐播放器为例》 在移动操作系统领域,安卓Android以其开放性和灵活性吸引了大量的开发者和用户。对于那些热衷于深入理解系统运行机制或者...
《安卓Android源码分析——以telecapoland-jamendo-android-6cd07fb开源音乐播放器为例》 在移动操作系统领域,安卓Android以其开放性和灵活性吸引了大量的开发者和用户。对于开发者来说,深入理解Android源码是...
【标题】"应用源码之telecapoland-jamendo--6cd07fb(国外开源音乐播放器).zip" 提供的是一个基于Android平台的开源音乐播放器项目,名为Telecapoland-Jamendo。该项目的源代码可以为开发者提供深入理解Android应用...
《安卓Android源码分析——基于telecapoland-jamendo-android-6cd07fb开源音乐播放器》 在深入理解Android应用开发的过程中,研究开源项目是极好的学习途径。本篇将聚焦于telecapoland-jamendo-android-6cd07fb,这...
《Android源码解析:telecapoland-jamendo-android-6cd07fb开源音乐播放器》 在Android应用开发的世界中,开源项目是开发者学习、借鉴和创新的重要资源。本篇将深入探讨一个名为"telecapoland-jamendo-android-6cd...
该压缩包文件“telecapoland-jamendo-android-6cd07fb(国外开源音乐播放器).zip”包含了开源的Android音乐播放器项目源码,这个项目名为TelecoCapoLand,它专注于提供Jamendo平台上的音乐播放服务。Jamendo是一个...
Jamendo是一款开源、免费的在线音乐播放平台,它专注于提供独立艺术家和自由版权音乐的流媒体服务。这个项目不仅是一个播放器,而且是一个社区,鼓励音乐爱好者发现、分享和享受原创音乐。作为开源软件,Jamendo的...
【标题】"Android参考源码-开发源码分享之在线音乐播放器完整项目"是一个针对Android平台的开源项目,旨在为开发者提供一个完整的在线音乐播放器的实现示例。这个项目可以帮助开发者理解和学习如何在Android上构建...
这篇文档将深入解析《Android应用源码之(国外开源音乐播放器)》这一项目,它是一个基于Android平台的音乐播放器应用源码,适合于计算机专业学生的毕业设计学习。源码来自于国外开源项目telecapoland-jamendo-...
【标题解析】 "安卓Android源码——开发源码分享之在线音乐...通过分析这个在线音乐播放器的源码,开发者可以学习到Android应用开发的多个方面,从基础到高级,从理论到实践,有助于提升技能并为自己的项目提供灵感。