`
zheyiw
  • 浏览: 1017011 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android gallery 3d

阅读更多
直接看代码,自定义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 gallery3D

    在Android平台上,"android gallery3D" 是一个用于创建类似iPhone风格3D图像浏览体验的应用程序。这个项目致力于实现一种视觉上引人入胜且流畅的图片画廊,通过优化和特殊效果处理,降低了图像边缘的锯齿现象,提供...

    android gallery 3D效果

    在Android平台上,`Gallery`组件曾经是实现3D滚动效果的一种流行方式,它允许用户以横向滑动的方式浏览图片或项目列表,同时提供了一种视觉上的立体感。然而,随着Android版本的更新,`Gallery`组件在API 16...

    Android Gallery3D

    **Android Gallery3D详解** Gallery3D是Android平台上的一款高性能图片浏览器应用,它以其流畅的3D滚动效果和优秀的用户体验而备受赞誉。本篇将深入探讨Gallery3D的源代码,解析其背后的实现原理和技术细节。 ### ...

    android Gallery3D 最新源码

    《Android Gallery3D最新源码解析》 Gallery3D是Android平台上的一款开源3D图片浏览应用,它以其高效、流畅的用户体验和强大的3D渲染能力而受到开发者和用户的喜爱。本文将深入探讨Gallery3D的最新源码,揭示其背后...

    Android Gallery 3D效果

    在Android早期版本中,`Gallery`被广泛用来创建类似相册的3D效果,尽管在API 16之后,它被`GridView`和`RecyclerView`等更灵活的视图替代。然而,通过一些自定义实现,我们仍然可以创建出类似`Gallery 3D`的效果。 ...

    android Gallery3D

    《Android Gallery3D:探索3D画廊的源码世界》 在移动设备上,用户界面的创新一直是吸引用户的关键因素之一。Android Gallery3D,正如其名,是一款基于Android平台的3D图像浏览应用,它为用户带来了全新的图片浏览...

    android Gallery 3d 图片浏览 oom

    在Android开发中,"android Gallery 3d 图片浏览 oom"是一个常见的问题,尤其是在处理大量图片时。oom,全称是Out Of Memory,即内存溢出错误,当应用程序分配的内存超过系统能提供的范围时,就会触发这个错误。本文...

    Android Gallery 3D

    **Android Gallery 3D 深度解析** Android Gallery 3D 是一款专为Android操作系统设计的三维图像浏览应用,它提供了高效的图片管理和流畅的3D浏览体验。这款经过优化的应用旨在提升用户在查看和管理手机照片时的...

    Android_Gallery3D源码(已编译)

    《Android_Gallery3D源码解析》 Gallery3D是Android平台上的一款3D图片浏览应用,它展示了Android系统中3D图形处理和图像展示的强大能力。这个应用的源码提供了深入理解Android图形库、线程管理、数据加载优化以及...

    android 的gallery3d

    **Android的Gallery3D详解** Gallery3D是Android操作系统中的一款强大的3D图像查看应用,专为用户提供了独特的三维浏览体验。它不仅是一款高效的图片管理工具,还利用了Android设备的硬件加速功能,实现了流畅的3D...

    android gallery3d 效果源码

    如果你想快速实现这个效果那么直接拷过去就可以运行了

    Android Gallery3D效果 教程 案例 代码

    在Android开发中,`Gallery3D`是一种实现3D效果的滚动视图,它允许用户在多个项目之间进行平滑的3D切换,通常用于图片画廊或应用选择器等场景。下面我们将深入探讨如何创建和自定义一个Android `Gallery3D`效果。 ...

    Android控件开发之Gallery3D酷炫效果(带源码)

    Android控件开发之Gallery3D酷炫效果(带源码),功能简单,欢迎下载

    安卓Android源码——Gallery3D.zip

    《深入剖析Android Gallery3D源码》 在Android操作系统中,Gallery3D是一款经典的图片浏览应用,它以其高效、流畅的用户体验而广受好评。本文将深入探讨Gallery3D的源码,帮助开发者理解其背后的实现原理,进一步...

    android Gallery 3d实现无限循环播放 用做广告板最后了

    在Android开发中,`Gallery`组件是一个非常有用的控件,它可以用来展示一系列的图片或其它内容,用户可以左右滑动来浏览。然而,原生的`Gallery`在Android API Level 16(Jelly Bean)之后已被废弃。尽管如此,...

    android 动态向Gallery中添加图片及倒影&&3D;效果

    总的来说,动态向`Gallery`中添加图片并实现倒影和3D效果是一个结合了Android UI设计、图像处理和动画技术的任务。通过以上步骤,你可以创建出一个既美观又互动性强的图片浏览界面。当然,实际开发中可能还需要考虑...

    Android Gellary3D 源码

    - **com.example.gallery3d.app**: 应用的主要逻辑,包括Activity、Fragment和其他核心类。 - **com.example.gallery3d.data**: 数据模型和数据加载相关的类,如图片数据结构、数据库访问等。 - **...

    android Grallery3D

    《Android Gallery3D深度解析》 Gallery3D是Android系统中的一个高性能图片浏览应用,它以其流畅的3D效果和高效的图片加载能力而备受开发者关注。本文将对Gallery3D进行深入探讨,揭示其背后的原理和技术实现。 1....

    android2.2 gallery3d源码

    android gallery3d源码,我测试过了,可以正常运行,希望对大家有用。

Global site tag (gtag.js) - Google Analytics