package com.android.CustomGallery;
import android.content.Context;
import android.graphics.Camera;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.Transformation;
import android.widget.Gallery;
import android.widget.ImageView;
public class GalleryFlow extends Gallery {
/**
* Graphics Camera used for transforming the matrix of ImageViews
*/
private Camera mCamera = new Camera();
/**
* The maximum angle the Child ImageView will be rotated by
*/
private int mMaxRotationAngle = 50;
/**
* The maximum zoom on the centre Child
*/
private int mMaxZoom = -250;
/**
* The Centre of the Coverflow
*/
private int mCoveflowCenter;
public GalleryFlow(Context context) {
super(context);
this.setStaticTransformationsEnabled(true);
}
public GalleryFlow(Context context, AttributeSet attrs) {
super(context, attrs);
this.setStaticTransformationsEnabled(true);
}
public GalleryFlow(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.setStaticTransformationsEnabled(true);
}
/**
* Get the max rotational angle of the image
*
* @return the mMaxRotationAngle
*/
public int getMaxRotationAngle() {
return mMaxRotationAngle;
}
/**
* Set the max rotational angle of each image
*
* @param maxRotationAngle
* the mMaxRotationAngle to set
*/
public void setMaxRotationAngle(int maxRotationAngle) {
mMaxRotationAngle = maxRotationAngle;
}
/**
* Get the Max zoom of the centre image
*
* @return the mMaxZoom
*/
public int getMaxZoom() {
return mMaxZoom;
}
/**
* Set the max zoom of the centre image
*
* @param maxZoom
* the mMaxZoom to set
*/
public void setMaxZoom(int maxZoom) {
mMaxZoom = maxZoom;
}
/**
* Get the Centre of the Coverflow
*
* @return The centre of this Coverflow.
*/
private int getCenterOfCoverflow() {
//Log.e("CoverFlow Width+Height", getWidth() + "*" + getHeight());
return (getWidth() - getPaddingLeft() - getPaddingRight()) / 2
+ getPaddingLeft();
}
/**
* Get the Centre of the View
*
* @return The centre of the given view.
*/
private static int getCenterOfView(View view) {
/*Log.e("ChildView Width+Height", view.getWidth() + "*"
+ view.getHeight());*/
return view.getLeft() + view.getWidth() / 2;
}
/**
* {@inheritDoc}
*
* @see #setStaticTransformationsEnabled(boolean)
*/
protected boolean getChildStaticTransformation(View child, Transformation t) {
final int childCenter = getCenterOfView(child);
final int childWidth = child.getWidth();
int rotationAngle = 0;
t.clear();
t.setTransformationType(Transformation.TYPE_MATRIX);
if (childCenter == mCoveflowCenter) {
transformImageBitmap((ImageView) child, t, 0);
} else {
rotationAngle = (int) (((float) (mCoveflowCenter - childCenter) / childWidth) * mMaxRotationAngle);
if (Math.abs(rotationAngle) > mMaxRotationAngle) {
rotationAngle = (rotationAngle < 0) ? -mMaxRotationAngle: mMaxRotationAngle;
}
transformImageBitmap((ImageView) child, t, rotationAngle);
}
return true;
}
/**
* This is called during layout when the size of this view has changed. If
* you were just added to the view hierarchy, you're called with the old
* values of 0.
*
* @param w
* Current width of this view.
* @param h
* Current height of this view.
* @param oldw
* Old width of this view.
* @param oldh
* Old height of this view.
*/
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mCoveflowCenter = getCenterOfCoverflow();
super.onSizeChanged(w, h, oldw, oldh);
}
/**
* Transform the Image Bitmap by the Angle passed
*
* @param imageView
* ImageView the ImageView whose bitmap we want to rotate
* @param t
* transformation
* @param rotationAngle
* the Angle by which to rotate the Bitmap
*/
private void transformImageBitmap(ImageView child, Transformation t,
int rotationAngle) {
mCamera.save();
final Matrix imageMatrix = t.getMatrix();
final int imageHeight = child.getLayoutParams().height;
final int imageWidth = child.getLayoutParams().width;
final int rotation = Math.abs(rotationAngle);
// ��Z���������ƶ�camera���ӽǣ�ʵ��Ч��Ϊ�Ŵ�ͼƬ��
// �����Y�����ƶ�����ͼƬ�����ƶ���X���϶�ӦͼƬ�����ƶ���
mCamera.translate(0.0f, 0.0f, 100.0f);
// As the angle of the view gets less, zoom in
if (rotation < mMaxRotationAngle) {
float zoomAmount = (float) (mMaxZoom + (rotation * 1.5));
mCamera.translate(0.0f, 0.0f, zoomAmount);
((ImageView) (child)).setAlpha((int) (255 - rotation * 2.5));
}
// ��Y������ת����ӦͼƬ�������ת��
// �����X������ת�����ӦͼƬ�������ת��
mCamera.rotateY(rotationAngle);
mCamera.getMatrix(imageMatrix);
// Preconcats matrix�൱���ҳ˾���Postconcats matrix�൱����˾���
imageMatrix.preTranslate(-(imageWidth / 2), -(imageHeight / 2));
imageMatrix.postTranslate((imageWidth / 2), (imageHeight / 2));
mCamera.restore();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
android相册3D源码
共52个文件
png:20个
class:11个
java:6个
5星 · 超过95%的资源 需积分: 9 77 下载量 131 浏览量
2013-01-17
14:20:36
上传
评论 1
收藏 3.19MB ZIP 举报
温馨提示
实现android上的3D相册源码 已验证可用 用来做相册播放器挺牛X的
资源推荐
资源详情
资源评论
收起资源包目录
CustomGalleryLikeiPhone(3D相册).zip (52个子文件)
CustomGalleryLikeiPhone(3D相册)
AndroidManifest.xml 692B
res
layout
main.xml 396B
drawable-ldpi
icon.png 2KB
drawable-mdpi
photo3.png 78KB
photo1.png 125KB
photo2.png 93KB
photo8.png 149KB
photo6.jpg 16KB
photo5.png 96KB
icon.png 3KB
photo4.png 123KB
photo7.png 129KB
drawable-hdpi
icon.png 4KB
values
strings.xml 176B
src
com
android
CustomGallery
MainActivity.java 785B
AA.java 312B
GalleryFlow.java 5KB
ImageAdapter.java 5KB
bin
classes
com
android
CustomGallery
BuildConfig.class 359B
ImageAdapter.class 5KB
R.class 580B
MainActivity.class 1KB
R$layout.class 415B
R$attr.class 361B
AA.class 443B
R$id.class 411B
GalleryFlow.class 4KB
R$string.class 448B
R$drawable.class 661B
dexedLibs
annotations-06d845c7c56427b837a7ef31a3a7a9b9.jar 943B
AndroidManifest.xml 692B
res
drawable-ldpi
icon.png 2KB
drawable-mdpi
photo3.png 78KB
photo1.png 125KB
photo2.png 93KB
photo8.png 148KB
photo5.png 86KB
icon.png 2KB
photo4.png 124KB
photo7.png 127KB
drawable-hdpi
icon.png 4KB
CustomGalleryLikeiPhone(3D相册).apk 817KB
jarlist.cache 119B
classes.dex 11KB
resources.ap_ 809KB
.classpath 364B
assets
project.properties 563B
.settings
org.eclipse.core.resources.prefs 57B
org.eclipse.jdt.core.prefs 177B
.project 873B
gen
com
android
CustomGallery
R.java 1KB
BuildConfig.java 167B
共 52 条
- 1
yuanl55
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页