gallery左右滑动时图片淡入淡出
前几天,公司项目有一个功能要做成滑动图片的淡入淡出,要一边滑动一边改变,所以ViewFlipper左右滑动效果就不能了。网上找了很久,也找不到资料,所以自己写了一个,通过滑动改变imageView的透明度。当按下图片时,先记下imageView的位置,图片滑动时,位置发生变化,就可以算出移动的距离,从而可以算出alpha的值。当图片向左滑动时,设置imageView的Alpha即imageView.setAlpha(255-alpha),设置下一个nextView的Alpha即nextView.setAlpha(alpha);当图片向右滑动时,设置imageView的Alpha即imageView.setAlpha(255-alpha),设置上一个lastView的Alpha即lastView.setAlpha(alpha);效果如图所示
废话就不多说了,上代码哈
package com.gallery.gradient; import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView; public class MyGallery extends Gallery { private ImageAdapter adapter;
private int position ;
private ImageView imageView;
private int[] viewLocation;
private ImageView nextView;
private ImageView lastView;
private int winWeight;
private Context context; public MyGallery(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
} public MyGallery(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
} public MyGallery(Context context, int[] residList) {
super(context);
this.context = context;
adapter = new ImageAdapter(context, residList);
setAdapter(adapter);
} @Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
position = getSelectedItemPosition();
imageView = (ImageView) findViewWithTag(position);
viewLocation = new int[2];
imageView.getLocationInWindow(viewLocation);
WindowManager wm = (WindowManager) context.getApplicationContext().getSystemService(
Context.WINDOW_SERVICE);
winWeight = wm.getDefaultDisplay().getWidth();
break;
case MotionEvent.ACTION_MOVE: break;
case MotionEvent.ACTION_UP:
// int position = getSelectedItemPosition();
// ImageView imageView = (ImageView) findViewWithTag(position);
// if (imageView != null) {
// System.out.println("imageView");
// imageView.setAlpha(255);
// int[] location = new int[2];
// imageView.getLocationInWindow(location);
// }
break; default:
break;
} return super.onTouchEvent(event);
} // @Override
// public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
// float distanceY) {
// if (e1.getX() > e2.getX()) {
// lastView = (ImageView) findViewWithTag(position+1);
// }else {
// nextView = (ImageView) findViewWithTag(position-1);
// }
//
//
// return super.onScroll(e1, e2, distanceX, distanceY);
// } @Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
int[] location = new int[2];
imageView.getLocationInWindow(location); if (location[0] != 0) {
if (location[0] > viewLocation[0]) {
int alpha = location[0] - viewLocation[0];
alpha = alpha * 255 / winWeight;
imageView.setAlpha(255-alpha);
lastView = (ImageView) findViewWithTag(position-1);
if (lastView != null) {
lastView.setAlpha((alpha));
}
}else {
int alpha = viewLocation[0] - location[0];
alpha = alpha * 255 / winWeight;
imageView.setAlpha(255-alpha);
nextView = (ImageView) findViewWithTag(position+1);
if (nextView != null) {
nextView.setAlpha(alpha);
}
}
}
if (location[0] == 0) {
if (lastView != null) {
lastView.setAlpha((255));
}
if (nextView != null) {
nextView.setAlpha(255);
}
}
} @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int kEvent;
if(isScrollingLeft(e1, e2)){ //Check if scrolling left
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
}
else{ //Otherwise scrolling right
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
} private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){
return e2.getX() > e1.getX();
} public class ImageAdapter extends BaseAdapter {
private Context mcontext;
private int[] residList; public ImageAdapter(Context context, int[] residList) {
this.residList = residList;
mcontext = context;
} @Override
public int getCount() {
return residList.length;
} @Override
public Object getItem(int position) {
return residList[position];
} @Override
public long getItemId(int position) {
return position;
} public int getResId(int position) {
return residList[position];
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView img;
if (convertView == null) {
img = new ImageView(mcontext);
img.setScaleType(ImageView.ScaleType.FIT_XY);
img.setLayoutParams(new Gallery.LayoutParams(-1, -1)); } else {
img = (ImageView) convertView;
}
img.setTag(position);
img.setImageResource(residList[position]);
return img;
} }
}
代码下载链接 http://pan.baidu.com/s/1hqxaYTu
gallery左右滑动时图片淡入淡出的更多相关文章
- [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html 这个可以实现ImageView异步加载 ...
- [转]Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡出效果)
http://blog.csdn.net/yanzi1225627/article/details/22439119 众所周知,想要让ImageView旋转的话,可以用setRotation()让其围 ...
- React-Native ListView加载图片淡入淡出效果的组件
今天练习项目中需要给listview在加载图片时增加一个淡入淡出的效果,因此干脆就自己封装了一个组件: 'use strict' import React from 'react-native' va ...
- javascript 图片淡入淡出效果 实例源代码
代码说明:把代码粘贴好之后,需要更改html代码中的图片路径,即可执行成功.后面还有对js代码的详细说明,希望大家好好消化,好好理解. html源代码: <head> <title& ...
- js实现多个图片淡入淡出,框架
单个淡入淡出已经写过,可以看看上几遍的博文 <style> *{ margin:0; padding:0; } div{ height:100px; width:100px; backgr ...
- jQuery实现简单的图片淡入淡出效果
整体思路: 1.实现页面布局,设置css样式 2.用jQuery获取需要用到的变量 3.用jQuery为两个按钮绑定事件 一.页面布局: <div class="d1"> ...
- Android RecyclerView 滑动时图片加载的优化
RecyclerView 滑动时的优化处理 在滑动时停止加载图片,在滑动停止时开始加载图片,这里用了Glide.pause 和Glide.resume.这里为了避免重复设置增加开销,设置了一个标志变量 ...
- JQuery--基础动画、滑动动画、淡入淡出动画、自定义动画
/** * [JQ基础动画] * show() 显示 * hide() 隐藏 * toggle() 切换 * 默认无动画,如果要产生动画 * 在括号内,添加毫秒数,可产生动画和控制动画的快慢 * * ...
- iOS-CALayer图片淡入淡出动画
]; } - (.f; CABasicAnimation *boundsAnimation = [CABasicAnimation animationWithKeyPath:, , ...
随机推荐
- visual studio 2012更换皮肤、功能添加
首先在vs2012的菜单:工具->扩展和更新,打开扩展和更新窗口,点击左侧“联机”,搜索栏里面输入Theme Editor.然后点击按钮,安装之后,在工具->选项->环境常规 面板上 ...
- cogs_396_魔术球问题_(最小路径覆盖+二分图匹配,网络流24题#4)
描述 http://cojs.tk/cogs/problem/problem.php?pid=396 连续从1开始编号的球,按照顺寻一个个放在n个柱子上,\(i\)放在\(j\)上面的必要条件是\(i ...
- js中字符串转换为日期和比较大小
本文转载于:http://yun342173024.iteye.com/blog/1873756在做前端校验的时候,要做日期比较的校验,在js中把字符串转化为日期,一时之间还真不知道在js中怎么把一个 ...
- web.xml配置详解之欢迎页面和错误页面
<!-- 应用的欢迎页面 采用list的方式罗列欢迎页面, 系统会从第一个找到最后一个,找到了文件就不继续往下找了.优先显示前边的. --> <welcome-file-list& ...
- 查看tablespace的使用情况
by tablespace(使用单位G): SELECT a.tablespace_name,(all_size-b.unuse_size) use_size,b.unuse_size,a.all_s ...
- SQL SERVER 2008查询其他数据库
1.访问本地的其他数据库 --启用Ad Hoc Distributed Queries-- reconfigure reconfigure -- 使用完成后,关闭Ad Hoc Distributed ...
- [codevs3295]落单的数
题目描述 Description 有n个数(n是奇数),其中n-1个数两两成对,有1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度 输入描述 Input Description ...
- Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)
1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...
- Scala学习笔记(一)数据类型
.类型参数化数组 val arrayString = Array[String](2); arrayString (0)="Hello"; arrayString (1)=&quo ...
- npm 国内镜像资源 --转载
npm 是node.js 环境下的包管理器,非常强大智能. 生活这这片神奇的土地上,各种奇葩手段屡见不鲜啊. 为什么要换源? npm 官方站点 http://www.npmjs.org/ 并没有被墙, ...