本篇文章主要介绍如何使用自定义的画廊控件,实现3 d效果的图片浏览器的效果。
话不多说,先看效果。
上面是一个自定义的画廊控件,实现倒影和仿3 d的效果,下面是一个图片查看器,点击上面的小图片,可以在下面查看大图片。
下面重点说一下,实现图片查看器的思路。
<强> 1。手机中图片路径的获取强>
首先,先不管图片如何展示,如果我们想实现图片查看器的功能,我们首先需要做的是获取到所有的图片的路径信息,只有这样,我们才能实现对图片的查看。
我们可以使用下面的代码实现
私人ListgetImagesFromSD () { List imageList=new ArrayList (); 文件f=Environment.getExternalStorageDirectory (); 如果(Environment.getExternalStorageState () .equals (Environment.MEDIA_MOUNTED)) { f=新文件(Environment.getExternalStorageDirectory () .toString ()); 其他}{ Toast.makeText (MainActivity。这个,R.string。sdcarderror Toast.LENGTH_LONG),告诉(); 返回imageList; } 文件[]文件=f.listFiles (); 如果(文件==null | |文件。长度==0) 返回imageList; for (int i=0;我& lt;files.length;我+ +){ 文件文件=文件[我]; 如果(isImageFile (file.getPath ())) imageList.add (file.getPath ()); } 返回imageList; } >之前 上面这个方法的作用,就是获取SD卡中,所有文件的后缀名满足图片后缀名的文件的路径,然后放到列表容器中返回。
isImageFile方法是这样实现的
私人布尔isImageFile(字符串帧){ 字符串结束=fName.substring (fName.lastIndexOf (“。”) + 1, fName.length ()) .toLowerCase (); 如果(end.equals (jpg) | | end.equals (gif) | | end.equals (png) | | end.equals (jpeg) | | end.equals (bmp)) { 返回true; } 返回错误; } >之前<强> 2。上方小图片3 d效果展示的实现强>
在完成了图片路径的获取之后,我们下面要做的就是将图片展示在上面的有3 d效果的自定义画廊控件上面。现在版本中画廊控件已经不再推荐使用,取而代之的:viewpage和HorizonalScrollView控件。
下面介绍具有自定义画廊控件的实现/* * * 3 d效果画廊实现 * * @time 2014年6月26日下午9:10:47 */@SuppressWarnings(弃用) 公开课GalleryFlow扩展画廊{ 私人相机mCamera=new相机();//两侧图片最大旋转角度 私人int mMaxRotationAngle=60; 私人int mMaxZoom=-120; 私人int mCoveflowCenter; 公共GalleryFlow(上下文语境){ 超级(上下文); this.setStaticTransformationsEnabled(真正的); } 公共GalleryFlow(上下文语境,AttributeSet attrs) { 超级(上下文,attrs); this.setStaticTransformationsEnabled(真正的); } 公共GalleryFlow(上下文语境、AttributeSet attrs int defStyle) { 超级(上下文、attrs defStyle); this.setStaticTransformationsEnabled(真正的); }//设置最大旋转角 公共空间setMaxRotationAngle (int maxRotationAngle) { mMaxRotationAngle=maxRotationAngle; }//获取当前控件中心点x轴位置 私人int getCenterOfCoverflow () { 返回(getWidth ()——getPaddingLeft ()——getPaddingRight ())/2 + getPaddingLeft (); }//获取视图控件的x轴位置 私有静态int getCenterOfView(查看视图){ 返回view.getLeft () + view.getWidth ()/2; }//默认返回值是false,若设置城真的,则每次画廊生成子控件的时候,都会调用这个方法,所以我们可以将返回值设置为真的,然后完成孩子的旋转等变形操作 保护布尔getChildStaticTransformation(查看孩子,变换t) { 最后一个int childCenter=getCenterOfView(孩子); 最后一个int childWidth=child.getWidth (); int rotationAngle=0; t.clear (); t.setTransformationType (Transformation.TYPE_MATRIX);//如果孩子控件在中心位置,则不旋转 如果(childCenter==mCoveflowCenter) { transformImageBitmap ((ImageView)孩子,t, 0); 其他}{//否,则将当前孩子控件旋转一定角度 rotationAngle=(int)(((浮动)(mCoveflowCenter - childCenter)/childWidth) * mMaxRotationAngle); 如果(Math.abs (rotationAngle)比;mMaxRotationAngle) { rotationAngle=(rotationAngle & lt;0)& # 63;-mMaxRotationAngle: mMaxRotationAngle; } transformImageBitmap ((ImageView)孩子,t, rotationAngle); } 返回true; }//重新计算控件的x轴位置 保护空白> @SuppressWarnings({“弃用”、“未使用”}) 公开课ImageAdapter延伸BaseAdapter { 私人上下文mContext;//用于存放图片的路径 私人ListAndroid自定义画廊控件实现3 d图片浏览器