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 ...
随机推荐
- C#设计模式(12)——享元模式(Flyweight Pattern)
一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...
- Try..Finally..相信自己的眼睛
问题提出 try { return x; } finally { x = null; } 上面这段代码到底怎么执行的? try..catch..finally 介绍 在MSDN中,try..catch ...
- 团队作业—第二周—SRS
一.系统整体用例图: 二.用户用例图: 三.医院用例图:
- listen--监听数量
listen--监听数量 #include <sys/socket.h> int listen(int sockfd, int backlog); /* backlog指定了该套接口排队的 ...
- atitit.表格的绑定client side 最佳实践
atitit.表格的绑定client side 最佳实践 1. 框架选型 1 2. #---原理和流程 1 1. 方法1 1 2. Dwr 例子 1 3. 方法2 2 4. Jq例如 2 1. 框架选 ...
- 啊哈C!思考快你一步——用编程轻松提升逻辑力
啊哈C!思考快你一步——用编程轻松提升逻辑力(双色)(每个人都应该学习如何编程,因为它教会你如何思考.——史蒂夫.乔布斯) 啊哈磊著 ISBN 978-7-121-21336-6 2013年9月出版 ...
- iOS-多线程-内存管理
iOS与OSX 多线程和内存管理 总结 一. 自动引用计数 1.自动引用计数(ARC)就是指内存管理中对引用采用自动计数的技术. 满足以下条件即可使用这种功能: Xcode ...
- css3多列显示
columen-width:定义单列显示的宽度.初始值是auto,适用于不可替代的块级元素,行内块元素和单元格,表格元素除外. 目前Webkit引擎支持-webkit-column-width,Moz ...
- php对csv文件的读取,写入,输出下载操作
在实际工作中,很多时候需要把网站上的一些数据下载到CSV文件里,方便以后查看. 亦或者是用CSV进行一些批量的上传工作. 这个时候我们就需要对CSV进行读写操作. 1.CSV的读取操作 <?ph ...
- 阅读开发高手的代码 分享二则.NET开发框架的技巧
最近阅读了一套ERP开发框架的源代码,对开发框架的理解又深入一层,也为其将知识点运用的如此灵活而自叹不如. 郎咸平教授说,国际金融炒家对国际金融知识的理解与运用程序,是不可想像的.1997年的亚洲金融 ...