android中无限循环滑动的gallery实例
android中无限循环滑动的gallery实例
1.点击图片有变暗的效果,使用imageview.setAlpha(),并且添加ontouchListener
public void init() {
dots = new ImageView[len];
for (int j = 0; j < len; j++) {
// 添加图片
final ImageView iv = new ImageView(this);
iv.setImageResource(res[j]);
views.add(iv);
iv.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
iv.setAlpha(70);
slideHandler.removeCallbacks(slideRun);
}
return false;
}
});
// 添加索引
ImageView imageView = new ImageView(this);
imageView.setLayoutParams(new LayoutParams(15, 15));
dots[j] = imageView;
TextView tv = new TextView(this);
tv.setText(" ");
if (j == 0) {
// 默认进入程序后第一张图片被选中;
dots[j].setBackgroundResource(R.drawable.yst_i_pageon);
} else {
dots[j].setBackgroundResource(R.drawable.yst_i_pageoff);
} layout_point.addView(tv);
layout_point.addView(imageView);
}
gallery.setAdapter(new ImageAdapter());
gallery.setSelection((Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2)
% len);
gallery.setOnItemSelectedListener(selectListener);
((MyGallery) gallery).setViews(views);
// TODO 定时滑动
startSlide();
}
2.无限滑动,自定义adapter,设置count为最大值,图片总数循环从0到图片的总长度
public class ImageAdapter extends BaseAdapter { public int getCount() {
if (views != null) {
return Integer.MAX_VALUE;
} else {
return 0;
}
} public Object getItem(int position) {
if (position >= len) {
position = position % len;
} return position;
} public long getItemId(int position) {
if (position >= len) {
position = position % len;
}
return position;
} public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (position >= len) {
position = position % len;
}
if (view == null) {
view = views.get(position);
} return view;
}
}
3.自动滑动,自定义gallery,重写onFling方法,触摸时,停止滑动,弹起时继续滑动
public class MyGallery extends Gallery { private List<ImageView> views;
/** 左边 */
public static final int LEFT = 0;
/** 右边 */
public static final int RIGHT = 1; public MyGallery(Context context) {
super(context);
// TODO Auto-generated constructor stub
} public MyGallery(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
} public MyGallery(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
} /** 设置视图 */
public void setViews(List<ImageView> views) {
this.views = views;
} @Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_UP) {
// 遍历views 设置alpha
if (views != null && !views.isEmpty()) {
for (ImageView iv : views) {
iv.setAlpha(255);
}
}
Context context = this.getContext();
if (context != null && context instanceof MainActivity) {
MainActivity main=(MainActivity) context;
main.startSlide();
}
}
return super.onTouchEvent(event);
} /** 滑动 direction=1向右,-1向左 */
public void slide(int direction) {
// MotionEvent e1 = MotionEvent.obtain(SystemClock.uptimeMillis(),
// SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,
// 89.333336f, 265.33334f, 0);
// MotionEvent e2 = MotionEvent.obtain(SystemClock.uptimeMillis(),
// SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 300.0f,
// 238.00003f, 0);
if (direction == this.RIGHT)
this.onFling(null, null, -1200, 0);
else {
this.onFling(null, null, 1200, 0);
}
}
}
下面贴出完整代码:
布局xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_light"
tools:context=".MainActivity" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:orientation="vertical" > <com.allen.gallery.MyGallery
android:id="@+id/mygallery"
android:layout_width="fill_parent"
android:layout_height="160dp"
android:fadingEdge="horizontal|vertical"
android:fadingEdgeLength="20dp" /> <LinearLayout
android:id="@+id/layout_dots"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout> </RelativeLayout>
2.完整的实现代码:
package com.allen.gallery; import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; public class MainActivity extends Activity {
private List<ImageView> views = new ArrayList<ImageView>();
/** 图片资源 */
private int[] res = new int[] { R.drawable.image1, R.drawable.image2,
R.drawable.image3, R.drawable.image4 };
private ImageView[] dots;
int len = 4;
int currentItem = 0;// 当前选中的viewPager的item
private Gallery gallery;
private LinearLayout layout_point;
/** 定时滑动 */
private final Handler slideHandler = new Handler();
/** 滑动 */
private final Runnable slideRun = new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
currentItem++;
currentItem = checkPosition(currentItem);
((MyGallery) gallery).slide(MyGallery.RIGHT);
slideHandler.postDelayed(this, 2000);
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化中间
layout_point = (LinearLayout) this.findViewById(R.id.layout_dots);
gallery = (Gallery) findViewById(R.id.mygallery);
gallery.setSpacing(20);
init();
} public void init() {
dots = new ImageView[len];
for (int j = 0; j < len; j++) {
// 添加图片
final ImageView iv = new ImageView(this);
iv.setImageResource(res[j]);
views.add(iv);
iv.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
iv.setAlpha(70);
slideHandler.removeCallbacks(slideRun);
}
return false;
}
});
// 添加索引
ImageView imageView = new ImageView(this);
imageView.setLayoutParams(new LayoutParams(15, 15));
dots[j] = imageView;
TextView tv = new TextView(this);
tv.setText(" ");
if (j == 0) {
// 默认进入程序后第一张图片被选中;
dots[j].setBackgroundResource(R.drawable.yst_i_pageon);
} else {
dots[j].setBackgroundResource(R.drawable.yst_i_pageoff);
} layout_point.addView(tv);
layout_point.addView(imageView);
}
gallery.setAdapter(new ImageAdapter());
gallery.setSelection((Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2)
% len);
gallery.setOnItemSelectedListener(selectListener);
((MyGallery) gallery).setViews(views);
// TODO 定时滑动
startSlide();
} private AdapterView.OnItemSelectedListener selectListener = new AdapterView.OnItemSelectedListener() { @Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
if (position >= len) {
position = position % len;
currentItem = position;
}
selectPage();
} @Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
}; public class ImageAdapter extends BaseAdapter { public int getCount() {
if (views != null) {
return Integer.MAX_VALUE;
} else {
return 0;
}
} public Object getItem(int position) {
if (position >= len) {
position = position % len;
} return position;
} public long getItemId(int position) {
if (position >= len) {
position = position % len;
}
return position;
} public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (position >= len) {
position = position % len;
}
if (view == null) {
view = views.get(position);
} return view;
}
} /** 开始滑动 */
public void startSlide() {
slideHandler.postDelayed(slideRun, 2000);
} public int checkPosition(int position) {
if (position >= len) {
position = position % len;
} return position;
} /** 设置当前选中页 */
private void selectPage() {
/** 设置当前显示的页码 */
for (int i = 0; i < len; i++) {
dots[currentItem].setBackgroundResource(R.drawable.yst_i_pageon);
if (currentItem != i) {
dots[i].setBackgroundResource(R.drawable.yst_i_pageoff);
}
}
}
}
点击我
下载就不用了吧。。。
© Copyright by allen
android中无限循环滑动的gallery实例的更多相关文章
- Android中ViewPager实现滑动条及与Fragment结合的实例教程
ViewPager类主要被用来实现可滑动的视图功能,这里我们就来共同学习Android中ViewPager实现滑动条及与Fragment结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...
- 详细分析Android viewpager 无限循环滚动图片
由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...
- 关于UIScrollView无限循环滑动
在使用某宝或某东购物的时候,我们会在其首页看到一个可以滑动的版块,这个版块的实现就是一个UIScrollView.在我们使用UIScrollView的时候会发现,滑动到最后的时候,UIScrollVi ...
- Android中制作自定义dialog对话框的实例
http://www.jb51.net/article/83319.htm 这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继 ...
- android 自定义无限循环播放的viewPager。轮播ViewPager。实现循环播放 广告,主题内容,活动,新闻内容时。
前言 实际项目需要一个 播放广告的控件,可能有多个广告图片.每个一段时间更换该图片.简单来说,就是一个 “循环播放图片”的控件. 间隔时间更换图片 一般来说,图片切换时需要有动画效果 需要支持手势,用 ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...
- Android中Handler的使用方法及实例(基础回顾)
Handler使用例1 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会 ...
- 详解实现Android中实现View滑动的几种方式
注: 本文提到的所有三种滑动方式的完整demo:ScrollDemo 1. 关于View我们需要知道的 (1)什么是View? Android中的View类是所有UI控件的基类(Base class) ...
- Android中的跨进程通信方法实例及特点分析(一):AIDL Service
转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40947481 近期有一个需求就是往程序中增加大数据的採集点,可是由于我们的Andro ...
随机推荐
- 那些年我们一起追过的Linux命令
1. cd - 作用:返回上次的目录,类似于Windows的后退功能: 2. man ascii 作用:打印出八进制.十六进制和十进制的ASCII码表:(再也不用Google ASCII表啦) 3. ...
- [游戏模版5] Win32 折线 弧线
>_<:first build some points put in poly1[],poly2[] and poly3[] in the function of InitInstance ...
- ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯
本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...
- 专题:点滴Javascript
JS#38: Javascript中递归造成的堆栈溢出及解决方案 JS#37: 使用console.time测试Javascript性能 JS#36: Javascript中判断两个日期相等 JS#3 ...
- 通过Greasemonkey实现网页图片自动点击
昨天受一个朋友所托,实现了一个在特定网页自动点击某超链接图片实现网页跳转功能的JavaScript脚本. 工具就是Firefox的Greasemonkey扩展插件.代码如下: // ==UserScr ...
- atititt.java定时任务框架选型Spring Quartz 注解总结
atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增 ...
- java获取静态页面内容
package collection_map; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.F ...
- Leetcode 107 Binary Tree Level Order Traversal II 二叉树+BFS
题意是倒过来层次遍历二叉树 下面我介绍下BFS的基本框架,所有的BFS都是这样写的 struct Nodetype { int d;//层数即遍历深度 KeyType m;//相应的节点值 } que ...
- Liferay7 BPM门户开发之33: Portlet之间通信的3种方式(session、IPC Render Parameter、IPC Event、Cookies)
文章介绍了5种方式,4种是比较常用的: Portlet session IPC Public Render Parameters IPC Event Cookies 参考地址: https://web ...
- Python:如何显示进度条
首先,推荐一个组件:progressive 效果如下: 进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过std ...