package org.pskink;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Matrix;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemSelectedListener;
public class AnimatedSizingGallery extends Gallery implements OnItemSelectedListener {
public static final String TAG = "AnimatedSizingGallery";
private static final int MSG_ZOOM_IN = 1;
private static final long DELAY = 100;
private View mPrev;
private float mAnimationScale;
private float mAnimationOffsetY;
private int mAnimationDuration;
public AnimatedSizingGallery(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AnimatedSizingGallery);
mAnimationScale = a.getFloat(R.styleable.AnimatedSizingGallery_animationScale, 2);
mAnimationOffsetY = a.getFloat(R.styleable.AnimatedSizingGallery_animationOffsetY, 0);
mAnimationDuration = a.getInteger(R.styleable.AnimatedSizingGallery_animationDuration, 500);
a.recycle();
setOnItemSelectedListener(this);
}
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (mPrev != null) {
zoomOut();
}
mPrev = view;
mGalleryHandler.removeCallbacksAndMessages(view);
Message msg = Message.obtain(mGalleryHandler, MSG_ZOOM_IN, view);
mGalleryHandler.sendMessageDelayed(msg, DELAY);
}
public void onNothingSelected(AdapterView<?> parent) {
Log.d(TAG, "onNothingSelected called !!!");
if (mPrev != null) {
zoomOut();
mPrev = null;
}
}
private void zoomOut() {
if (mGalleryHandler.hasMessages(MSG_ZOOM_IN, mPrev)) {
mGalleryHandler.removeCallbacksAndMessages(mPrev);
} else {
ZoomAnimation a = (ZoomAnimation) mPrev.getAnimation();
a.resetForZoomOut();
mPrev.startAnimation(a);
}
}
Handler mGalleryHandler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
if (msg.what == MSG_ZOOM_IN) {
ImageView view = (ImageView) msg.obj;
Animation a = new ZoomAnimation(view, 1, mAnimationScale, mAnimationOffsetY, mAnimationDuration);
view.startAnimation(a);
}
}
};
class ZoomAnimation extends Animation {
private float mFrom;
private float mTo;
private float mOffsetY;
private int mPivotX;
private int mPivotY;
private float mInterpolatedTime;
public ZoomAnimation(View v, float from, float to, float offsetY, int duration) {
super();
mFrom = from;
mTo = to;
mOffsetY = offsetY * v.getHeight();
setDuration(duration);
setFillAfter(true);
mPivotX = v.getWidth() / 2;
mPivotY = v.getHeight() / 2;
}
public void resetForZoomOut() {
reset();
mOffsetY = 0;
mFrom = mFrom + (mTo - mFrom) * mInterpolatedTime;
mTo = 1;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
mInterpolatedTime = interpolatedTime;
float s = mFrom + (mTo - mFrom) * interpolatedTime;
Matrix matrix = t.getMatrix();
if (mOffsetY != 0) {
matrix.preTranslate(0, mOffsetY * interpolatedTime);
}
if (mTo == 1) {
matrix.preRotate(360 * interpolatedTime, mPivotX, mPivotY);
}
matrix.preScale(s, s, mPivotX, mPivotY);
}
}
}
分享到:
相关推荐
实现的原理是 添加一ImageAdapter并设置给Gallery对象,设置一个itemclickListener并Toast被点击图片的位置,然后改写BaseAdapter自定义一ImageAdapter class ,创建ImageAdapter的构造器,取得Gallery属性的Index...
可以实现gallery浏览图片,手指滑动可以浏览,并且增加了字典里滑动图片方便大家浏览,图片还有文字说明,下面图片滚动标志。
C# Android Gallery-Dome图片滑动效果显示
android中运用gallery进行图片浏览,并用定时器实现图片的自动滑动浏览。
自定义Gallery 横向可滑动的刻度尺
自定义Gallery 相当于重写了源码,继承了android优点,取消了页面空白,默认选中图片在中间显示和滑动过快iade缺点 用起来非常方便
自定义Gallery,图片60,120度旋转展示,自定义组件学习的好资料
启动图滑动+gallery滑动 自动
经过几天的研究,我终于写出了这个效果!!但还有问题,正在进一步改善!此功能是Gallery控件滑动图片,底部显示点!!
Android自定义Gallery 自定义边框 底部小圆点 自动切换
Gallery控件,手动滑动的效果,里面是一个完整的代码
使用自定义viewpager模仿gallery的3d滑动效果,并且在滑动时加入了旋转、透明度和缩放的特效
利用ViewPager实现3D页面滑动效果,关联gallery滑动,实现对应滑动,每一个页面都是单独的fragment实现,方便流畅
Android Gallery 自定义ImageView和Gallery实现图片浏览功能,类似Android图库软件,主要实现的功能有:图片左右滑动、放大缩小、放大弹回、缩小弹回。 一开始使用Viewpager实现图片浏览,发现两张图片滑动时没有...
android 自定义gridView 按日期显示图片和视频 galleryDemo android 自定义gridView 按日期显示图片和视频 galleryDemo android 自定义gridView 按日期显示图片和视频 galleryDemo 免费下载 给个好评!
通过SurfaceView实现像Gallery手势滑动图片效果
Tab的点击切换和滑动切换实现,内部添加了Gif动画的显示,GridView自定义适配器以及Gallery的3D画廊效果可自定义时间的进行切换
由于android 自带的gallery会在第一项的前面和最后一项的后面留下空白,所以我用HorizontalScrollView,写了一个简单的类似gallery的功能。
Android 滑动效果 Gallery