版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、*/音乐播放器 三!-界面设计之专辑照片的实现 - *oogle、在奋斗 - 博客频道 - CSDN.NET1Google、在奋斗我只有很努力你看我才觉毫不费力。目录视图摘要视图订阅1 10文章分类Android开发小知识积累系列 16 android开发-*/音乐播放器系列 11 AC0-字符串 1 AC0-省赛集 1 AC0-图论 1 AC0-排序 1 心情随笔 3 人生感悟 3 博客始记 1 博客专栏*/音乐播放器开发文章:12篇阅读:1726文章搜索公告栏风过留痕雁过留声如果您真的喜欢我的文章可以留下评论我们一起讨论希望对您的学习有所帮助转载请注明出处、谢谢您的浏览【大声说出你的爱】C
2、SDN社区情人节特别活动 专访李云:从通讯行业的架构师到互联网新兵 电子版程序员杂志免费领GL音乐播放器-界面设计之专辑照片的实现分类: android开发-*/音乐播放器系列2014-02-18 12 49213人阅读评论 0 收藏 举报这篇博客我会向大家介绍如何实现歌曲专辑照片的实现。但是注意,只是歌曲自带的照片 科普一下,一般正版的音乐里都会带有这首歌所在专辑的专辑照片),我们接下来要做的就是找到这个照片,并将它显示出来。先上效果图:这就是我们要实现的效果。首先是要获得专辑封面的Uri,得到并进行处理java view plain copy print ?01.package com.g
3、enius.musicplay; 02.import java.io.FileDescriptor;import java.io.FileNotFoundException;import java.io.IOException; 06 mport java io InputStream; 07.08.import com.genius.demo.R; 09.10.11.import android.content.ContentResolver;import android.content.ContentUris;import android.content.Context;import an
4、droid.graphics.Bitmap;16mport android graphics BitmapFactory;import android.graphics.BitmapFactory.Options;import .Uri;import android.os.ParcelFileDescriptor; 20.public class MediaAlbum /获取专辑封面的Uriprivate static final Uri albumArtUri = Uri.parse(content:/media/external/audio/24./*25.* 获取默认专辑图片个人资料*o
5、ogleBacmer访问: 2574次积分: 423分 排名: 千里之外原创: 40篇 转载: 2篇译文: 0篇 评论: 5条GL音乐播放器-界面设计之专辑照片的实现 - Google、在奋斗 - 博客频道 - CSDN.NET8.396.param contextreturn*/public static Bitmap getDefaultArtwork(Context context,boolean small) BitmapFactory.Options opts = new
6、BitmapFactory.Options(); opts.inPreferredConfig = Bitmap.Config.RGB_565;if(small) /返回小图片return BitmapFactory.decodeStream(context.getResources().openRawResource(return BitmapFactory.decodeStream(context.getResources().openRawResource(R.dr/*从文件当中获取专辑封面位图param contextparam songidparam albumidreturn*/p
7、rivate static Bitmap getArtworkFromFile(Context context, long songid, long album5.96.97.Bitmap bm = null;if(albumid 0 & songid 0 throw new IllegalArgumentE
8、xception(Must specify an album or a song id);try BitmapFactory.Options options = new BitmapFactory.Options();FileDescriptor fd = null if(albumid 0)Uri uri = Uri.parse(content:/media/external/audio/media/+ songid + /albumart);ParcelFileDescriptor pfd = context.getContentResolver().openFileDescr if(pf
9、d != null) fd = pfd.getFileDescriptor(); else Uri uri = ContentUris.withAppendedId(albumArtUri, albumid); ParcelFileDescriptor pfd = context.getContentResolver().openFileDescr if(pfd != null) fd = pfd.getFileDescriptor();options.inSampleSize = 1/ 只进行大小判断options.inJustDecodeBounds = true;/ 调用此方法得到opt
10、ions得到图片大小BitmapFactory.decodeFileDescriptor(fd, null, options);/ 我们的目标是在800pixel的画面上显示/ 所以需要调用computeSampleSize得到图片缩放的比例options.inSampleSize = 100;/ 我们得到了缩放的比例,现在开始正式读入Bitmap数据 options.inJustDecodeBounds = false; options.inDither = falseoptions.inPreferredConfig = Bitmap.Config.ARGB_8888;/根据options
11、参数,减少所需要的内存bm = BitmapFactory.decodeFileDescriptor(fd, null, options); catch (FileNotFoundException e) e.printStackTrace();return bm;/*获取专辑封面位图对象param contextparam song_idparam album_idparam allowdefalutreturn*/public static Bitmap getArtwork(Context context, long song_id, int album_id, bool98.99.10
12、0.101.102.if(album_id 0) if(song_id 0) Bitmap bm = getArtworkFromFile(context, song_id, -1); if(bm != null) return bm;2/10最新评论GL音乐播放器1.0 0版- 总结帖卡夫卡卡 积分已献小表支持GL音乐播放器-代码实现-电卡夫卡卡: 不错的系列,一直在关注。哈哈GL音乐播放器-代码实现-进 Google_acmer: u013295109: 对,我刚开始就是看的他的代码,感觉那个抽屉挺好玩,学习了好多但是感觉他有好多.GL音乐播放器-代码实现-进 Google_acmer:
13、u013295109: 基本做完了、以后也就是加点功 能什么的。推荐文章JBoss 系列九十三: 高性能非阻塞 Web 服务器 Undertowi S安全攻防 十九):基于脚本实现动态库注入Java7之基础 - 强引用、弱引用、软引用、虚引用深入理解SELinux/SEAndroid(最后部分)Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题快速检测空间三角形相交算法的代码实现(Devillers & Guigue算法)评论排行GL音乐播放器-代码实现 (3)GL音乐播放器-代码实现 (1)GL音乐播放器1.0 0版- (0)A
14、ndroid开发环境搭建教 (0)GL音乐播放器-代码实现 (0)心情随笔-(0)关于向安卓模拟机SD卡 (0)GL音乐播放器-代码实现 (0)GL音乐播放器-界 (0)visibility属性(0)阅读排行GL音乐播放器-代码实现 (239)GL音乐播放器-界面 (212)GL音乐播放器-代码实现 (206) Android 广播大全 Intent (193) GL音乐播放器-代码实现 (158)GL音乐播放器-代码实现 (155)GL音乐播放器-代码实现 (146)GL音乐播放器1.0 0版- (138)GL音乐播放器-界 ( 29)GL音乐播放器-代码实现 (119)文章存档2014年0
15、2月 (42)大连海事大学第一届编程马拉松挑战赛多校联赛DIV1 第一场 (3)GL音乐播放器-界面设计之专辑照片的实现 - Google、在奋斗 - 博客频道 - CSDN.NET0021.122.123.if(allowdefalut) eturn getDefaultArtwork(context, small);return null;ContentResolver res = context.getContentResolver();Uri u
16、ri = ContentUris.withAppendedId(albumArtUri, album_id); if(uri != null) InputStream in = null; try in = res.openInputStream(uri);BitmapFactory.Options options = new BitmapFactory.Options();/先制定原始大小 options.inSampleSize = 1;/只进行大小判断 options.inJustDecodeBounds = true;/调用此方法得到options得到图片的大小 BitmapFacto
17、ry.decodeStream(in, null, options);* 我们的目标是在你N pixel的画面上显示。 所以需要调用computeSampleSize得到图片缩放的比例 */* 这里的target为800是根据默认专辑图片大小决定的,800只是测试数字但是试验后发现完美的结合 */if(small)options.inSampleSize = computeSampleSize(options, 40); elseoptions.inSampleSize = computeSampleSize(options, 600);/ 我们得到了缩放比例,现在开始正式读入Bitmap数据
18、 options.inJustDecodeBounds = false; options.inDither = false;options.inPreferredConfig = Bitmap.Config.ARGB_8888; in = res.openInputStream(uri);eturn BitmapFactory.decodeStream(in, null, options); catch (FileNotFoundException e) Bitmap bm = getArtworkFromFile(context, song_id, album_id); if(bm != n
19、ull) if(bm.getConfig() = null) bm = bm.copy(Bitmap.Config.RGB_565, false); if(bm = null & allowdefalut) return getDefaultArtwork(context, small); else if(allowdefalut) bm = getDefaultArtwork(context, small);eturn bm; finally try if(in != null) in.close(); catch (IOException e) e.printStackTrace();re
20、turn null;78.179./*对图片进行合适的缩放param optionsparam targetreturn*/public static int com
21、puteSampleSize(Options options, int target) int w = options.outWidth;int h = options.outHeight; int candidateW = w / target; int candidateH = h / target;int candidate = Math.max(candidateW, candidateH); if(candidate = 0) return 1;if(candidate 1) if(w target) & (w / candidate) target) candidate -= 1;
22、3/10GL音乐播放器-代码实现-进卡夫卡卡: 楼主这个播放器做完了吗*/音乐播放器 三!-界面设计之专辑照片的实现 - *oogle、在奋斗 - 博客频道 - CSDN.NET89.if(candidate 1) if(h target) & (h / candidate) target) candidate -= 1;return candidate;接下来是图片处理的工具类,这个是别人已经完成的,所以我就偷懒了,嘻嘻java view plain copy print ?01.02.03.04.05.06.07.0
23、8.00.package com.genius.widget;import import import import importjava.io.ByteArrayOutputStream; java.io.File; java.io.FileNotFoundException; java.i
24、o.FileOutputStream; java.io.IOException;import import import import import import import import import import import import import import import import import import importandroid.content.Context; android.graphics.Bitmap; android.gpressFormat;android.graphics.Bitmap.Config; android.graphics.BitmapFa
25、ctory; android.graphics.Canvas; android.graphics.ColorMatrix; android.graphics.ColorMatrixColorFilter; android.graphics.LinearGradient; android.graphics.Matrix; android.graphics.Paint; android.graphics.PorterDuff; android.graphics.PorterDuff.Mode; android.graphics.PorterDuffXfermode; android.graphic
26、s.Rect; android.graphics.RectF; android.graphics.Shader; android.graphics.drawable.BitmapDrawable; android.graphics.drawable.Drawable;* 图片工具类*/public class ImageUtil /*图片的八个位置*/ public static final public static final public static final public static final public static final public static final pu
27、blic static final public static final/上/下/左/右/左上/左下int TOP = 0; int BOTTOM = 1; int LEFT = 2; int RIGHT = 3;int LEFT_TOP = 4int LEFT_BOTTOM = 5;int RIGHT_TOP = 6;/右上 int RIGHT_BOTTOM = 7;/右下/*图像的放大缩小方法param srcparam scaleXparam scaleY源位图对象宽度比例系数高度比例系数* return 返回位图对象*/public static Bitmap zoomBitmap(
28、Bitmap src, float scaleX, float scaleY) Matrix matrix = new Matrix();matrix.setScale(scaleX, scaleY);Bitmap t_bitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), return t_bitmap;/*图像放大缩小-根据宽度和高度param src4 10GL音乐器-界面设计之专辑param widthparam heightreturn*/的实现 -、在奋斗 - 博客频道 - CSDN.NET6
29、000039.public sic Bitmap zoomBi
30、mtap(Bitmap src,width,height) return Bitmap.createScaledBitmap(src, width, height, true);/*将Drawable转为Bitmap对象param drawablereturn*/public sic Bitmap drawableToBitmap(Drawable drawable) return (BitmapDrawable)drawable).getBitmap();/*将Bitmap转换为Drawable对象param bitmapreturn*/public sic DrawabitmapToDra
31、wab Drawable drawable = new BitmapDrawab return drawable;itmap bitmap) itmap);/*Bitmap转byteparam bitmapreturn*/public sic byte bitmapToByte(Bitmap bitmap) ByteArrayOutputStream out = new ByteArrayOutputStream();press(return out.toByteArray();pressFormat.PNG, 100, out);/*byte转Bitmapparam datareturn*/
32、public sic Bitmap byteToBitmap(byte data) if(data.length != 0) return BitmapFactory.decodeByteArray(data, 0, data.length);return null;/*绘制带圆角的图像param srcparam radiusreturn*/public sfinal final/ic Bitmap createRoundedCornerBitmap(Bitmap src, w = src.getWidth();h = src.getHeight();量32位图radius) Bitmap
33、bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);Papa= ne();Canvas(bitmap);Canvas canvas = newcanvas.drawARGB(0, 0, 0, 0); pa.setColor(0 xff424242);/ 防止边缘的锯齿pa.setFilterBitmap(true);Rect rect = new Rect(0, 0, w, h); RectF rectf = new RectF(rect);/ 绘制带圆角的矩形canvas.drawRoundRect(rectf, radius, radi
34、us, pa);/ 取两层绘制交集,显示上层pa.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);/ 绘制图像canvas.drawBitmap(src, rect, rect, pa); return bitmap;5/10GL音乐播放器-界面设计之专辑照片的实现 - Google、在奋斗 - 博客频道 - CSDN.NET64.1
35、00016.217.218./*创建选中带提示图片param contextparam srcIdparam tipIdreturn*/public static Drawable createSe
36、lectedTip(Context context, int srcId, int tipId) Bitmap src = BitmapFactory.decodeResource(context.getResources(), srcId); Bitmap tip = BitmapFactory.decodeResource(context.getResources(), tipId); final int w = src.getWidth();final int h = src.getHeight();Bitmap bitmap = Bitmap.createBitmap(w, h, Co
37、nfig.ARGB_8888); Paint paint = new Paint();Canvas canvas = new Canvas(bitmap);/绘制原图canvas.drawBitmap(src, 0, 0, paint);/绘制提示图片canvas.drawBitmap(tip, (w - tip.getWidth(), 0, paint); return bitmapToDrawable(bitmap);/*带倒影的图像param srcreturn*/public static Bitmap createReflectionBitmap(Bitmap src) / 两个图像
38、间的空隙final int spacing = 4;final int w = src.getWidth(); final int h = src.getHeight();/ 绘制高质量32位图Bitmap bitmap = Bitmap.createBitmap(w, h + h / 2 + spacing, Config.ARGB_8888);/ 创建燕X轴的倒影图像 Matrix m = new Matrix(); m.setScale(1 -1);Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true
39、);Canvas canvas = new Canvas(bitmap); Paint paint = new Paint();/ 绘制原图像canvas.drawBitmap(src, 0, 0, paint);/ 绘制倒影图像canvas.drawBitmap(t_bitmap, 0, h + spacing, paint);/ 线性渲染-沿Y轴高到低渲染Shader shader = new LinearGradient(0, h + spacing, 0 h + spacing + h / 2, 0 x70ff paint.setShader(shader);/ 取两层绘制交集,显示下
40、层。paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN);/ 绘制渲染倒影的矩形canvas.drawRect(0, h + spacing, w, h + h / 2 + spacing, paint); return bitmap;/*独立的倒影图像param srcreturn*/public static Bitmap createReflectionBitmapForSingle(Bitmap src) final int w = src.getWidth();final int h = src.getHeight();/ 绘制高
41、质量32位图Bitmap bitmap = Bitmap.createBitmap(w, h / 2, Config.ARGB_8888);/ 创建沿X轴的倒影图像 Matrix m = new Matrix(); m.setScale(1 -1);Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true);Canvas canvas = new Canvas(bitmap); Paint paint = new Paint();/ 绘制倒影图像canvas.drawBitmap(t_bitmap, 0, 0
42、paint);/ 线性渲染-沿Y轴高到低渲染Shader shader = new LinearGradient(0, 0, 0, h / 2, 0 x70ffffff, 0 x00ffffff, Shader.TileMode.MIRROR);6/10GL音乐播放器-界面设计之专辑照片的实现 - Google、在奋斗 - 博客频道 - CSDN.NET34.235.236.paint.setShader(shader);/ 取两层绘制交集。显示下层。paint.setXf
43、ermode(new PorterDuffXfermode(Mode.DST_IN);/ 绘制渲染倒影的矩形canvas.drawRect(0, 0, w, h / 2, paint); return bitmap;public static Bitmap createGreyBitmap(Bitmap src) final int w = src.getWidth();final int h = src.getHeight();Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Ca
44、nvas(bitmap);Paint paint = new Paint();/ 颜色变换的矩阵ColorMatrix matrix = new ColorMatrix();/ saturation 饱和度值,最小可设为0,此时对应的是灰度图;为1表示饱和度不变,设置大于1,就显示过饱和matrix.setSaturation(0);ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); paint.setColorFilter(filter);canvas.drawBitmap(src, 0, 0, paint)
45、; return bitmap;55.256.257.258.259.260.261.262.263.264.265.266.267.268.269.270.271.272.273.274.275.276.277.278.279.280.281.282.283.284.285.286.287.288.289.290.291.292.293.294.295.296./*保存图片param srcparam filepathparam format:re
46、turn*/pressForpressFormat.JPEGpublic static boolean saveImage(Bitmap src, String filepath, CompressFormat format) boolean rs = false;File file = new File(filepath); try FileOutputStream out = new FileOutputStream(file);if(press(format, 100, out) out.flush();/写入流out.close(); catch (FileNotFoundExcept
47、ion e) e.printStackTrace(); catch (IOException e) e.printStackTrace();return rs;/*添加水印效果param src源位图param watermark 水印param direction 方向param spacing 间距return*/public static Bitmap createWatermark(Bitmap src, Bitmap watermark, int direction, int final int w = src.getWidth();final int h = src.getHeig
48、ht();Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Canvas(bitmap);canvas.drawBitmap(src, 0, 0, null); if(direction = LEFT_TOP) canvas.drawBitmap(watermark, spacing, spacing, null); else if(direction = LEFT_BOTTOM)canvas.drawBitmap(watermark, spacing, h - watermark.
49、getHeight() - spacing, nu else if(direction = RIGHT_TOP) canvas.drawBitmap(watermark, w - watermark.getWidth() - spacing, spacing, nul else if(direction = RIGHT_BOTTOM) canvas.drawBitmap(watermark, w - watermark.getWidth() - spacing, h - watermarreturn bitmap;/* 合成图像7/10*/音乐播放器 三!-界面设计之专辑照片的实现 - *oo
50、gle、在奋斗 - 博客频道 - CSDN.NET297.298.299.300.301.302.303.304.305.306.307.308.309.310.311.312.313.314.315.316.317.318.319.320.321.322.323.324.325.326.327.328.329.330.331.332.333.334.335.336.337.338.339.340.341.342.343.344.345.346.347.348.349.350.351.352.353.354.355.356.357.358.359.param directionparam bi
51、tmapsreturn*/public static Bitmap composeBitmap(int direction, Bitmap. bitmaps) if(bitmaps.length 2) return null;Bitmap firstBitmap = bitmaps0;for (int i = 0; i fw ? sw : fw, fh + sh, Config.ARGB_8888); canvas = new Canvas(bitmap);canvas.drawBitmap(secondBitmap, 0, 0, null); canvas.drawBitmap(firstB
52、itmap, 0, sh, null); else if(direction = BOTTOM) bitmap = Bitmap.createBitmap(fw sw ? fw : sw, fh + sh, Config.ARGB_8888); canvas = new Canvas(bitmap);canvas.drawBitmap(firstBitmap, 0, 0, null); canvas.drawBitmap(secondBitmap, 0, fh, null); else if(direction = LEFT) bitmap = Bitmap.createBitmap(fw +
53、 sw, sh fh ? sh : fh, Config.ARGB_8888); canvas = new Canvas(bitmap);canvas.drawBitmap(secondBitmap, 0, 0, null); canvas.drawBitmap(firstBitmap, sw, 0, null); else if(direction = RIGHT) bitmap = Bitmap.createBitmap(fw + sw, fh sh ? fh : sh, Config.ARGB_8888);canvas = new Canvas(bitmap); canvas.drawB
54、itmap(firstBitmap, 0, 0, null); canvas.drawBitmap(secondBitmap, fw, 0, null);return bitmap;接下来便是在MusicPlayActivity里创建一个用来显示图片的函数java view plain copy print ?private ImageView musicAlbum; /音乐专辑封面 nbsp;private ImageView musicAblumReflection; /倒影反射01.02.java view plain copy print ?/显示专辑照片private void showArtwork(MusicData mp3Info) 01.02.8 10*/音乐播放器 三!-界面设计之专辑照片的实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Photoshop CS6 期末考试试题及详细答案
- 2025-2026学年黑龙江省伊春市初中历史七年级期末上册评估重点试卷(详细参考解析)
- PCR扩增技术专项考试题(含详细答案)
- 蜡染工安全操作规程
- 粉尘清扫作业安全操作规程
- PACS系统岗位实操考核试题(含详细答案解析)
- OPPO在线笔试题(含详细答案解析)
- 烟气制酸工安全操作规程
- 水泥窑预热器巡检工安全操作规程
- 2026年护理管理制度试题及答案
- 2026西安电网面试题库及答案
- 2026中国智慧城市大脑建设进展与商业化运营模式研究
- 五年级数学上册计算题10套
- 智能医学概论 课件 第5、6章 医学影像模式识别与图像识别、人工智能与药物研发
- 地铁站项目高处作业专项方案
- 2026四川事业单位公共基础知识真题
- 2025年内蒙古自治区(专升本)英语考试真题及参考答案
- 2026年化工行业创新报告及生物基材料应用技术分析报告
- 2025年医学副主任医师真题解析含答案
- 二期工业固废填埋场及可利用工业废渣堆场堆存方式改造项目环境影响报告书
- 品检考核制度
评论
0/150
提交评论