android镜像站点:http://developer.android.com.nyud.net
1.开发书籍下载
http://www.verycd.com/topics/2812741/
http://www.doc88.com/p-47230828611.html
2.其他书
http://www.hjenglish.com/dl/p10802/
3.手机驱动
http://www.drvsky.com/moto/ME600.htm
4.ME600刷机
http://www.hiapk.com/thread-593113-1-1.html
eoe·Android开发者门户
标题: gallery3d源码学习总结(一)——绘制流程drawFocusItems [打印本页]
作者: specialbrian 时间: 2010-10-29 20:15 标题: gallery3d源码学习总结(一)——绘制流程drawFocusItems
本帖最后由 specialbrian 于 2010-11-4 07:59 编辑
显示单张图片相关的输入变量
删除当前选中槽位前后2步之外的大缩略图
得到当前图片的DispalyItem元素
判断大缩略图是否加载完成
是否跳过当前图片前一张图片
开启opengl混合模式并设置混合函数
循环遍历前中后三幅图片分别进行“核心绘制处理”
核心绘制处理——输入变量准备
在幻灯模式下且超过1秒的切换时间无须显示前后两张图片;
得到视角和当前displayItem、对应媒体对象、小缩略图材质、大缩略图材质。
加载高质量的材质资源
如果Camera正在拉远或拉近,且大缩略图材质为空或未加载完成,则选择小缩略图作为材质,将当前图片的“大缩略图混合比例”变量进行初始化(目标值为1秒,渐变时间为0.75秒,渐变开始时间为当前帧时间)。
如果处于放大状态,则加载原图hiRes,加载成功后赋值给材质变量texture;并清除前后图片的原图。
加载材质
保留当前的最佳材质,
如果此材质加载未完成,则继续按优先级加载,并把小缩略图(基本上都已经加载成功了)设置为当前材质;
最佳材质未加载完成之前,替换渐变不会开始。
无须绘制
如果相机缩放过程中,非幻灯片模式下且镜头中不需要展示前一张的情况下,无须处理前一张;
如果相机缩放或幻灯片绘制过程中,需要展示前一张的情况下,无须处理后一张。
处理前后渐变绘制
如果处于幻灯片模式中 渐变过程中,处理上一幅相片时找到它的下一个DispalyItem,处理本张相片则直接使用当前DispalyItem,为的是同样找到当前DisplayItem,并绑定上一张相片和本张相片,两张相片透明度互补达到渐变的效果。
绘制小大缩略图渐变过程-小缩略图
绘制小缩略图,请注意:selectedMixRatio表示大缩略图的绘制透明度,小缩略图的自然就是1.0f - selectedMixRatio。
绘制小大缩略图渐变过程-大缩略图
更新当前图片长宽数据
绘制视频元素
【此部分讲解已结束】,如您对其他部分感兴趣请回帖说明
作者: lily0314 时间: 2010-11-1 10:53
本帖最后由 lily0314 于 2010-11-19 15:55 编辑
写的挺好啊,谢谢啦!
作者: lily0314 时间: 2010-11-1 11:15
GridLayer和HudLayer分别是负责什么的?
作者: specialbrian 时间: 2010-11-1 11:26
回复 3# lily0314
HudLayer是交互控件图层,GridLayer是动画元素层。
作者: lily0314 时间: 2010-11-1 14:30
谢谢啦,能否详细讲讲drawBlendedComponents和drawThumbnails方法?
作者: lily0314 时间: 2010-11-1 15:04
STATE_TIMELINE(GridLayer中的)是什么状态?能否截图?
作者: lily0314 时间: 2010-11-1 17:19
你好,我还想请问一下从打开软件,到呈现出文件夹界面,经过了哪些过程?图片的坐标是固定的吗?随着重力感应和手指滑动,位置会有细微的小位移,用什么方法呢?是改变视点还是怎样?具体的代码是怎样呢?
作者: specialbrian 时间: 2010-11-2 09:51
本帖最后由 specialbrian 于 2010-11-2 09:53 编辑
回复 6# lily0314
[attach]12020[/attach]
图片附件: device.png (2010-11-2 09:53, 359.51 KB) / 下载次数 1
http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTIwMjR8MWI5NzVmYWN8MTMwMTYyMzkxNnw0ODEyMzA%3D
作者: lily0314 时间: 2010-11-2 10:17
回复 8# specialbrian
噢,同一个文件夹内,按时间分类的界面啊,为什么我看不到这种界面?是需要怎样触发呢?
那么STATE_MEDIA_SETS是刚打开时候的主界面(有文件夹的),STATE_GRID_VIEW是缩略图矩阵浏览的界面,对吗?
作者: specialbrian 时间: 2010-11-2 14:24
回复 9# lily0314
你的理解没错,不过我习惯管STATE_MEDIA_SETS叫做相册表格页,STATE_GRID_VIEW是相片表格页,时间分类页在相片表格页的右上角控件控制,详见我图中的红色标记
作者: lily0314 时间: 2010-11-2 14:54
回复 10# specialbrian
非常感谢!不知我之前的问题有没有可解?
作者: eoe-android-com 时间: 2010-11-2 15:29
想了解一下 缓存管理那一块的
CacheService类 ,以及怎么进行异步加载的呢 以及缓存文件的的写入读取的过程
特别是DCIM\.thumbnails\.thumbdata3--1967290299 缩略图文件是如何创建的
可否 详细的讲解一下呢 谢谢
如果方便的话可否加QQ:907288406交流一下
作者: specialbrian 时间: 2010-11-2 15:43
回复 11# lily0314
正在汇总整理当中,估计今明两天给出响应帖子
作者: lily0314 时间: 2010-11-2 16:05
回复 13# specialbrian
呵呵谢谢啦,我就是看到哪,想到一些问题,就问你了,很期待你的讲解!
作者: lily0314 时间: 2010-11-2 16:55
本帖最后由 lily0314 于 2010-11-2 16:57 编辑
HudLayer.java文件中的MODE_NORMAL和MODE_SELECT是指哪些模式呢?是不是普通的模式和标记选中模式?我偶然能到标记选中模式下,但是不知道是怎么触发的,想请教下,可否有截图?
作者: specialbrian 时间: 2010-11-2 21:28
回复 5# lily0314
已经写了另一篇帖子,写了下drawThumbnails
http://www.eoeandroid.com/viewthread.php?tid=41731&extra=
作者: specialbrian 时间: 2010-11-2 21:31
回复 15# lily0314
是的,你的理解完全正确。出发多选的方式是长按一个相册或相片。
作者: specialbrian 时间: 2010-11-3 17:10
回复 12# eoe-android-com
第三篇文章
http://www.eoeandroid.com/viewthread.php?tid=41920&extra=
写了大体流程,如有疑问请提到这个帖子中吧
作者: eoe-android-com 时间: 2010-11-8 15:43
回复 18# specialbrian
非常感谢
作者: xiaomeigu330 时间: 2010-12-7 13:31
非常好,学习中。。。
作者: kuanbaobei 时间: 2010-12-8 11:45
楼主,你太帅了!能否把你对gallery3d的学习笔记,提供打包下载呢?真是讲的太好了!
作者: specialbrian 时间: 2010-12-30 14:38
目前只有这三篇:gallery3d源码学习总结(一)(二)(三),留下我的QQ:634589207
作者: contentroot 时间: 2011-1-24 11:46
问个问题。
大缩略图是做什么用的?
我跟代码没看到运行过呀?
作者: MEYEGG 时间: 2011-2-22 19:06
:):):)
作者: lzl26689 时间: 2011-3-7 17:39
谢谢啦
作者: qiuxueming 时间: 2011-3-7 18:38
不错,做个记号
选择了要删除的联系人,uriData; 调用DeleteMultipleContactResult(uriData);
private int num;
private void DeleteMultipleContactResult(ArrayList<Uri> uriData){ num = uriData.size();//获取要删除联系人的个数 final DialogInterface.OnClickListener deleteMultipleClickListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which){ connect(uriData); } }; //show dialog.if ok,then delete multiple contacts new AlertDialog.Builder(this) .setTitle(R.string.deleteConfirmation_title) .setIcon(android.R.drawable.ic_dialog_alert) .setMessage(R.string.multipleContactDeleteConfirmation) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, deleteMultipleClickListener) .show(); } private void connect(ArrayList<Uri> uriData){ DeleteMultipleTask Task = new DeleteMultipleTask(this); Task.execute(uriData); } class DeleteMultipleTask extends AsyncTask<ArrayList<Uri>,Integer,String>{ boolean mCanceled = false; ProgressDialog dialog; public DeleteMultipleTask(Context context){ dialog = new ProgressDialog(context);//删除过程中显示进度条 dialog.setButton(getString(android.R.string.cancel), new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog,int i){ dialog.dismiss(); mCanceled = true; } }); dialog.setCancelable(false); dialog.setMax(num); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setTitle(R.string.dialog_delete_multiple); dialog.show(); } @Override protected String doInBackground(ArrayList<Uri>... uriDatas) { // TODO Auto-generated method stub ArrayList<Uri> uriData = uriDatas[0]; ContentResolver resolver = getContentResolver(); for(int i = 0; i < num; i++){ if(!mCanceled){ mSelectedContactUri = uriData.get(i); resolver.delete(RawContacts.CONTENT_URI, RawContacts.CONTACT_ID + "=" + ContentUris.parseId(mSelectedContactUri),null); dialog.incrementProgressBy(1); }else{ break; } } return null; } protected void onPostExecute(String result){ dialog.dismiss(); } }