Android自定义画廊控件实现3 d图片浏览器

  

本篇文章主要介绍如何使用自定义的画廊控件,实现3 d效果的图片浏览器的效果。

  

话不多说,先看效果。

  

 Android自定义画廊控件实现3 d图片浏览器

  

上面是一个自定义的画廊控件,实现倒影和仿3 d的效果,下面是一个图片查看器,点击上面的小图片,可以在下面查看大图片。

  

下面重点说一下,实现图片查看器的思路。

  

<强> 1。手机中图片路径的获取

  

首先,先不管图片如何展示,如果我们想实现图片查看器的功能,我们首先需要做的是获取到所有的图片的路径信息,只有这样,我们才能实现对图片的查看。

  

我们可以使用下面的代码实现

        私人ListgetImagesFromSD () {   ListimageList=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;//用于存放图片的路径   私人List

Android自定义画廊控件实现3 d图片浏览器