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超炫的图片浏览器.zip
共40个文件
class:12个
jpg:9个
xml:5个
0 下载量 132 浏览量
2024-04-09
12:03:57
上传
评论
收藏 1.96MB ZIP 举报
温馨提示
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
android超炫的图片浏览器.zip (40个子文件)
android超炫的图片浏览器
ACDsee.rar 996KB
ACDsee
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
default.properties 980B
.project 842B
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
AndroidManifest.xml 684B
gen
com
sky_dreaming
ACDsee
R.java 2KB
cn
hou
test
image
activity
共 40 条
- 1
资源评论
小肥羊k
- 粉丝: 1364
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功