package com.sky_dreaming.ACDsee.gallery_view;
import android.content.Context;
import android.graphics.Camera;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Transformation;
import android.widget.Gallery;
import android.widget.ImageView;
/**
* ****************************************************************
* 文件名称 : GalleryFlow.java
* 创建时间 : 2010-11-2 下午05:27:46
* 文件描述 : 自定义Gallery视图,实现图片旋转效果
*****************************************************************
*/
public class GalleryFlow extends Gallery {
/**
* 用于ImageView的矩阵变换
*/
private Camera mCamera = new Camera();
private int mMaxRotationAngle = 60;
/**
* The maximum zoom on the centre Child
*/
private int mMaxZoom = -120;
/**
* 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 set 方法
* @return
*/
public int getMaxRotationAngle() {
return mMaxRotationAngle;
}
public void setMaxRotationAngle(int maxRotationAngle) {
mMaxRotationAngle = maxRotationAngle;
}
public int getMaxZoom() {
return mMaxZoom;
}
public void setMaxZoom(int maxZoom) {
mMaxZoom = maxZoom;
}
/**
* 获取Coverflow的中心位置
* @return
*/
private int getCenterOfCoverflow() {
return (getWidth() - getPaddingLeft() - getPaddingRight()) / 2
+ getPaddingLeft();
}
/**
* 获取子视图的中心位置
* @param view
* @return
*/
private static int getCenterOfView(View view) {
return view.getLeft() + view.getWidth() / 2;
}
protected boolean getChildStaticTransformation(View child, Transformation t) {
final int childCenter = getCenterOfView(child);
final int childWidth = child.getWidth();
int rotationAngle = 0;
/**
* 重置transformation
*/
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;
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mCoveflowCenter = getCenterOfCoverflow();
super.onSizeChanged(w, h, oldw, oldh);
}
/**
* 将子视图旋转相应角度 ?????????????
*
* @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);
}
/**
* 在Y轴上旋转,对应图片竖向向里翻转。如果在X轴上旋转,则对应图片横向向里翻转。
*/
mCamera.rotateY(rotationAngle);
mCamera.getMatrix(imageMatrix);
imageMatrix.preTranslate(-(imageWidth / 2), -(imageHeight / 2));
imageMatrix.postTranslate((imageWidth / 2), (imageHeight / 2));
/**
* 恢复相机原状态
*/
mCamera.restore();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于android图片识别浏览器系统设计与实现源码+数据库(高分优秀毕业设计)个人经导师指导并认可通过的高分毕业设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 基于android图片识别浏览器系统设计与实现源码+数据库(高分优秀毕业设计)个人经导师指导并认可通过的高分毕业设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 基于android图片识别浏览器系统设计与实现源码+数据库(高分优秀毕业设计)个人经导师指导并认可通过的高分毕业设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
资源推荐
资源详情
资源评论
收起资源包目录
基于android图片识别浏览器.zip (39个子文件)
ACDsee
.classpath 280B
.settings
org.eclipse.core.resources.prefs 296B
assets
src
com
sky_dreaming
ACDsee
gallery_view
GalleryFlow.java 5KB
ImageAdapter.java 4KB
ACDsee.java 4KB
res
values
strings.xml 236B
color.xml 101B
attrs.xml 179B
layout
image.xml 1KB
drawable
bg.png 269KB
icon.png 3KB
bin
resources.ap_ 228KB
ACDsee.apk 236KB
classes.dex 13KB
com
sky_dreaming
ACDsee
gallery_view
GalleryFlow.class 4KB
ImageAdapter.class 5KB
R$string.class 477B
R$layout.class 410B
ACDsee$1.class 1KB
R$id.class 462B
ACDsee.class 5KB
R$attr.class 355B
R$color.class 408B
R$drawable.class 441B
R$styleable.class 570B
R.class 680B
cn
hou
test
image
activity
sdCardͼƬ
img0330.jpg 41KB
img0030.jpg 47KB
img0354.jpg 24KB
img0130.jpg 33KB
img0100.jpg 25KB
img0001.jpg 16KB
img0230.jpg 29KB
img0200.jpg 38KB
img0300.jpg 12KB
default.properties 980B
.project 842B
AndroidManifest.xml 684B
gen
com
sky_dreaming
ACDsee
R.java 2KB
cn
hou
test
image
activity
共 39 条
- 1
资源评论
大雨淅淅
- 粉丝: 5086
- 资源: 347
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功