直接看代码,自定义gallery,代码大部分是学习的网上的.
附件是demo,有建议欢迎讨论



public class Gallery3D extends Gallery {   private Camera camera = new Camera();// 相机类  private int maxRotationAngle = 60;// 最大转动角度  private int maxZoom = 60;// z方向的移动至,相当于缩放    private int coveflowCenter;// 半径值

   private int height;

 public Gallery3D(Context context, AttributeSet attrs, int defStyle) {     super(context, attrs, defStyle);      this.setStaticTransformationsEnabled(true);   }

   public Gallery3D(Context context, AttributeSet attrs) {       super(context, attrs);        this.setStaticTransformationsEnabled(true);   }

   public Gallery3D(Context context) {       super(context);       this.setStaticTransformationsEnabled(true);   }

   @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        super.onLayout(changed, l, t, r, b);      height = getHeight();    }

   public int getMaxRotationAngle() {        return maxRotationAngle;  }

   public void setMaxRotationAngle(int maxRotationAngle) {       this.maxRotationAngle = maxRotationAngle;    }

   public int getMaxZoom() {     return maxZoom;   }

   public void setMaxZoom(int maxZoom) {     this.maxZoom = maxZoom;  }

   private int getCenterOfCoverflow() {      return (getWidth() - getPaddingLeft() - getPaddingRight()) / 2                + getPaddingLeft();  }

   private static int getCenterOfView(View view) {       System.out.println("view left :" + view.getLeft());        System.out.println("view width :" + view.getWidth());      return view.getLeft() + view.getWidth() / 2; }

   // 控制gallery中每个图片的旋转(重写的gallery中方法)   @Override    protected boolean getChildStaticTransformation(View child, Transformation t) {        // 取得当前子view的半径值      final int childCenter = getCenterOfView(child);      System.out.println("childCenter:" + childCenter);       final int childWidth = child.getWidth();     // 旋转角度       int rotationAngle = 0;       // 重置转换状态     t.clear();        // 设置转换类型     t.setTransformationType(Transformation.TYPE_BOTH);        // 如果图片位于中心位置不需要进行旋转      if (childCenter == coveflowCenter) {            transformImageBitmap((ImageView) child, t, 0);        } else {          // 根据图片在gallery中的位置来计算图片的旋转角度         rotationAngle = (int) (((float) (coveflowCenter - childCenter) / childWidth) * maxRotationAngle);            System.out.println("rotationAngle:" + rotationAngle);          // 如果旋转角度绝对值大于最大旋转角度返回(-mMaxRotationAngle或mMaxRotationAngle;)           if (Math.abs(rotationAngle) > maxRotationAngle) {              rotationAngle = (rotationAngle < 0) ? -maxRotationAngle                       : maxRotationAngle;           }         transformImageBitmap((ImageView) child, t, rotationAngle);        }     return true;  }

   protected void onSizeChanged(int w, int h, int oldw, int oldh) {      coveflowCenter = getCenterOfCoverflow();     super.onSizeChanged(w, h, oldw, oldh);    }

   private void transformImageBitmap(ImageView child, Transformation t,          int rotationAngle) {      // 对效果进行保存        camera.save();

      // 返回旋转角度的绝对值     // final int rotation = Math.abs(rotationAngle);

       // 在Z轴上正向移动camera的视角,实际效果为放大图片。        // 如果在Y轴上移动,则图片上下移动;X轴上对应图片左右移动。        camera.translate(0f, 0f, maxZoom);        // // 精确的缩放控制     // if (rotation < mMaxRotationAngle) {     // float zoomAmount = (float) (mMaxZoom + (rotation * 1.5));        // mCamera.translate(0.0f, 0.0f, zoomAmount);     // }      // 如果在Y轴上旋转,对应图片竖向向里翻转。        // 如果在X轴上旋转,对应图片横向向里翻转。        camera.rotateY(rotationAngle);        final Matrix imageMatrix = t.getMatrix();        camera.getMatrix(imageMatrix);        camera.restore();

       // 设置旋转中心点        // 图片高度,用的gallery的高度      // 图片宽度,用的图片宽度;这里图片的高度取不到,都是-1,不知道什么原因        final int imageWidth = child.getLayoutParams().width;

      imageMatrix.preTranslate(-(imageWidth / 2), -height / 2);     imageMatrix.postTranslate((imageWidth / 2), height / 2);      camera.save();    }

}

android gallery 3d相关推荐

  1. android图片显示组件,Android可循环显示图像的Android Gallery组件用法实例

    本文实例分析了Android可循环显示图像的Android Gallery组件用法.分享给大家供大家参考,具体如下: Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能 ...

  2. Android 登录3D翻转动画效果

    Android 登录3D翻转动画效果 描述:这是一个 登录3D翻转效果的Demo. 项目代码在最后面!!!!跳转到最后 控件效果如下: 实现功能: 使页面进行3D翻转(3D翻转效果) 可通过回调监听两 ...

  3. Unity3D应用--打造Android车载3D车模桌面(车载主界面开发)

    前言 Android中应用加载Unity3D来显示3D效果参考上一篇博文:Unity3D导出Android工程(Android中应用Unity3D) 透明背景实现参考另一篇博文: 在Android中U ...

  4. android+3d引擎,基于Android系统3D引擎的设计与实现

    摘要: 随着人们生活水平的提高与科学技术的高速发展,在嵌入式设备上开发3D应用程序将会成为亮点,把3D技术应用到Android产品中,会极大的提高产品的竞争力.而3D图形开发的过程中所涉及的知识相当广 ...

  5. Android Gallery简单3d效果使用

    为避免每次都要去找,还是自己整理一下好了.有需要的同学自行下载源码,只要稍微有点基本功的同学估计都看得懂!至于新手而言,能拿来用就好了,我们并不关心"手机"是如何生产出来的,只要知 ...

  6. Android Gallery控件使用方法详解

    我们今天给大家讲的就是Gallery控件,这个控件在android当中是非常重要的,我们今天就给大家介绍一下3D的Gallery控件是怎么样来实现的.下面我们就来直接看看代码吧. 1.扩展Galler ...

  7. Android gallery详解

    为什么80%的码农都做不了架构师?>>>    继承关系 public class Gallery extends AbsSpinner implements GestureDete ...

  8. Android Gallery组件详解(转)

    http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182297&reltid=39709&pre_thread_id ...

  9. android显示3d模型_使用Unity AR Foundation在增强现实中查看模型

    本文将分享麻省理工学院的教程-使用Unity AR Foundation在增强现实中查看模型. 在本教程中,我们将介绍如何把3D模型导入Unity,并使用Android设备或iOS设备在AR中查看模型 ...

  10. Android Gallery和ImageSwitcher同步自动(滚动)播放图片库

    本文主要内容是如何让Gallery和ImageSwitcher控件能够同步自动播放图片集 ,看起来较难,然而,实现的方法非常简单, 请跟我慢慢来.总的来说,本文要实现的效果如下图:(截图效果不怎么好) ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续6)
  2. Java 常用代码汇总
  3. pt-tools系统:pt-kill 实战
  4. 免费下载田志刚《呼叫中心知识库心得》电子书
  5. Openstack Nova 源码分析 — Create instances (nova-conductor阶段)
  6. 第一周——数据分析之表示 —— Numpy入门
  7. Oral certificate at 7TH INTERNATIONAL CONFERENCE ON CONTROL, AUTOMATION AND ROBOTICS (ICCAR)
  8. python-1day
  9. Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
  10. 分享一下dudu回答的一个方法
  11. fate服务器维护,活动维护公告(2020年4月1日 14时)
  12. oracle 安装ora 27102,ORA-27102 解决办法
  13. webview android%3e28,Android WebView 文明踩坑之路
  14. 西门子S7-200PLC基本入门编程
  15. MS17-010漏洞复现(带win7虚拟机安装,零基础)
  16. java怎么实现微博评论_关于微博评论功能的设计与思考
  17. ceph pg peering和恢复 (1)
  18. 2018年蓝桥杯C++省赛B组【G:螺旋折线】 【思维】
  19. OJ 1478 机器翻译
  20. 树莓派 or 香橙派 部署c# .net 并设置开机启动

热门文章

  1. 基于CANape开发的XCP测量
  2. 数据库设计以及PD数据导入数据库
  3. android 图片合成pdf文件,教你怎么把多张图片合成一个pdf文件
  4. 代码行数统计工具,java,go,c++,html文件都适用
  5. 遗传算法小结及算法实例(附Matlab代码)
  6. android 编程w3c,w3cschool-编程学院
  7. centos安装activitymq
  8. 7.2.5 dps 测试软件,dps排行榜网站_7.1.5dps排行榜分享DPS模拟常见上榜翻译2
  9. 惠普HP DeskJet 2131 打印机驱动
  10. 【历史上的今天】8 月 29 日:Wolfram 语言之父、“新”科学家 Stephen Wolfram 的诞生