android gallery 自定义边框+幻灯片效果
最近在项目中用到图片轮播,试了Gallery,ViewFlipper,ViewPager,感觉Gallery最符合需求,但是Gallery的系统边框很难看,项目中要求用自己的背景图片。
下面来看一下使用Gallery实现图片轮播
运行效果:

布局文件:
- <FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:paddingTop="10dp" >
- <Gallery
- android:id="@+id/gallery"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:fadingEdge="none"
- android:spacing="0dp" />
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="18dp"
- android:layout_gravity="bottom"
- android:layout_marginBottom="3dp"
- android:layout_marginLeft="3dp"
- android:layout_marginRight="3dp"
- android:background="#80776f63"
- android:gravity="center" >
- <ImageView
- android:id="@+id/dot_1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_dot_normal" />
- <ImageView
- android:id="@+id/dot_2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
- android:layout_toRightOf="@+id/dot_1"
- android:src="@drawable/ic_dot_normal" />
- <ImageView
- android:id="@+id/dot_3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
- android:layout_toRightOf="@+id/dot_2"
- android:src="@drawable/ic_dot_normal" />
- </RelativeLayout>
- </FrameLayout>
其中, android:fadingEdge="none"消除图片两边的阴影。使用FrameLayout在底部显示小圆点
- public class MainActivity extends Activity {
- private Gallery mGallery;
- private int index = 0;// 记录选中的图片位置
- private ImageView[] mImageViewIds;// 小圆点ImageView数组
- private static final int IMAGE_COUNT = 3;// 小圆点个数
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- findViews();
- mImageViewIds[0].setImageDrawable(getBaseContext().getResources()
- .getDrawable(R.drawable.ic_dot_focused));
- ImageAdapteradapter = new ImageAdapter(this);
- mGallery.setAdapter(adapter);
- Timer timer = new Timer();
- timer.schedule(task, 2000, 2000);
- mGallery.setOnItemSelectedListener(onItemSelectedListener);
- mGallery.setOnItemClickListener(onItemClickListener);
- }
- private void findViews() {
- mGallery = (Gallery) findViewById(R.id.gallery);
- mImageViewIds = new ImageView[] { (ImageView) findViewById(R.id.dot_1),
- (ImageView) findViewById(R.id.dot_2),
- (ImageView) findViewById(R.id.dot_3) };
- }
- private TimerTask task = new TimerTask() {
- @Override
- public void run() {
- Message message = new Message();
- message.what = 2;
- index = mGallery.getSelectedItemPosition();
- index++;
- handler.sendMessage(message);
- }
- };
- /**
- * 开一个线程执行耗时操作
- */
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- switch (msg.what) {
- case 2:
- mGallery.setSelection(index);
- break;
- default:
- break;
- }
- }
- };
- /**
- * 设置小圆点显示,position会一直增加,如果要循环显示图片,需要对position取余,否则数组越界
- */
- private OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- int pos = position % IMAGE_COUNT;
- mImageViewIds[pos].setImageDrawable(getBaseContext().getResources()
- .getDrawable(R.drawable.ic_dot_focused));
- if (pos > 0) {
- mImageViewIds[pos - 1].setImageDrawable(getBaseContext()
- .getResources().getDrawable(R.drawable.ic_dot_normal));
- }
- if (pos < (IMAGE_COUNT - 1)) {
- mImageViewIds[pos + 1].setImageDrawable(getBaseContext()
- .getResources().getDrawable(R.drawable.ic_dot_normal));
- }
- if (pos == 0) {
- mImageViewIds[IMAGE_COUNT - 1]
- .setImageDrawable(getBaseContext().getResources()
- .getDrawable(R.drawable.ic_dot_normal));
- }
- }
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- // TODO Auto-generated method stub
- }
- };
- /**
- * 点击事件,点击图片进入SecondActivity
- */
- private OnItemClickListener onItemClickListener = new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
- long arg3) {
- Intent intent = new Intent();
- intent.setClass(MainActivity.this, SecondActivity.class);
- startActivity(intent);
- }
- };
- }
ImageAdapter类,重写android.widget.BaseAdapter,用于描述图像信息。
- public class ImageAdapter extends BaseAdapter {
- private Context context;
- private int[] mImages = { R.drawable.bg_timeline_01,
- R.drawable.bg_timeline_02, R.drawable.bg_timeline_03 };
- private static final int IMAGE_PX_HEIGHT = 198;
- public ImageAdapter(Context context) {
- this.context = context;
- }
- @Override
- public int getCount() {
- return Integer.MAX_VALUE;//实现循环显示
- }
- @Override
- public Object getItem(int position) {
- return position;
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageView imageView = new ImageView(context);
- imageView.setImageResource(mImages[position % mImages.length]);
- imageView.setScaleType(ImageView.ScaleType.CENTER);
- imageView.setLayoutParams(new Gallery.LayoutParams(
- Gallery.LayoutParams.FILL_PARENT, IMAGE_PX_HEIGHT));
- RelativeLayout borderImg = new RelativeLayout(context);
- borderImg.setPadding(2, 2, 2, 2);
- borderImg.setBackgroundResource(R.drawable.bg_gallery);//设置ImageView边框
- borderImg.addView(imageView);
- return borderImg;
- }
- }
如果用系统背景,可以这样写
- int mGalleryItemBackground;
- private Context mContext;
- public ImageAdapter(Context context)
- {
- mContext = context;
- // 获得Gallery组件的属性
- TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
- mGalleryItemBackground = typedArray.getResourceId(
- R.styleable.Gallery_android_galleryItemBackground, 0);
- }
在getview中设置
- imageView.setBackgroundResource(mGalleryItemBackground);
Gallery组件属性信息定义在res\values\attrs.xml
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <declare-styleable name="Gallery">
- <attr name="android:galleryItemBackground" />
- </declare-styleable>
- </resources>
详细讲解见http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182297
自定义边框参考http://stackoverflow.com/questions/4830173/change-border-style-in-gallery
android gallery 自定义边框+幻灯片效果的更多相关文章
- android gallery 自定义边框+幻灯片
最近在项目中用到图片轮播,试了Gallery,ViewFlipper,ViewPager,感觉Gallery最符合需求,但是Gallery的系统边框很难看,项目中要求用自己的背景图片. 下面来看一下使 ...
- Android checkbox 自定义点击效果
安卓默认的效果 自定义后的效果 前面的图片当然可以自己修改. 实现这个效果的步骤如下 1.建立 一个selector 的xml <?xml ver ...
- Android之EditText自定义边框和边框颜色(转载)
介绍一种比较常见的用法 第一步:准备两张图片大小一样,颜色不同的图片.图片名称分为:editbox_focus.png和editbox_normal.png 放入工程的drawable文件夹下. 第二 ...
- Android之Button自定义点击效果
我们在界面上经常会用到button按钮,但通常button点击后看不到点击的效果,如果用户连续点击了两次,就会报NAR错误,这样交互性就比较差了.如果我们自定义了button点击效果,比如我们点击了b ...
- Android 自定义View修炼-【2014年最后的分享啦】Android实现自定义刮刮卡效果View
一.简介: 今天是2014年最后一天啦,首先在这里,我祝福大家在新的2015年都一个个的新健康,新收入,新顺利,新如意!!! 上一偏,我介绍了用Xfermode实现自定义圆角和椭圆图片view的博文& ...
- Android自定义类似ProgressDialog效果的Dialog
Android自定义类似ProgressDialog效果的Dialog. 方法如下: 1.首先准备两张自己要定义成哪样子的效果的图片和背景图片(也可以不要背景). 如我要的效果: 2.定义loadin ...
- 50个Android开发人员必备UI效果源码[转载]
50个Android开发人员必备UI效果源码[转载] http://blog.csdn.net/qq1059458376/article/details/8145497 Android 仿微信之主页面 ...
- [转载] 50个Android开发人员必备UI效果源码
好东西,多学习! Android 仿微信之主页面实现篇Android 仿微信之界面导航篇Android 高仿QQ 好友分组列表Android 高仿QQ 界面滑动效果Android 高仿QQ 登陆界面A ...
- Android自定义控件 -- 带边框的TextView
使用xml实现边框 原来使用带边框的TextView时一般都是用XML定义来完成,在drawable目录中定义如下所示的xml文件: <?xml version="1.0" ...
随机推荐
- 【BZOJ 4380】4380: [POI2015]Myjnie (区间DP)
4380: [POI2015]Myjnie Description 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i].有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗 ...
- vijos Warcraft III 守望者的烦恼
题解 转移方程好写吧 一个一维递推式 然后我们可以构造矩阵优化 嗯,最近学一下递推优化 代码 #include<cstdio> #include<cstring> #inclu ...
- [BZOJ4517][SDOI2016]排列计数(错位排列)
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1616 Solved: 985[Submit][Statu ...
- [ZROI 9.15模拟赛] Tutorial
Link: 传送门 可能要补一补之前的题了 题目名字天(Sky)的(De)炭(C)好评啊…… A: 从买/卖物品的配对来考虑: 可以发现如果当前物品为卖,肯定从之前选最小的(无论其为买/卖),因为贡献 ...
- Test20171009 考试总结 NOIP模拟赛
题目难度合适,区分度适中,但是本人水平不佳,没有拿到满意的分数. T1(matrix) 一种比较容易想到的想法是枚举起点求出最长全1串做预处理,这是O(n^2)的. 接着枚举列起点,列终点,通过后缀和 ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- Mac 显示隐藏的文件
要显示隐藏文件: 在终端中输入代码:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏文件: 在终端输入代码:default ...
- [转]Eclipse 的快捷键以及文档注释、多行注释的快捷键
一.多行注释快捷键 1.选中你要加注释的区域,用ctrl+shift+C 或者ctrl+/ 会加上//注释 2.先把你要注释的东西选中,用shit+ctrl+/ 会加上/* */注释 3.以上快 ...
- 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询
D - 秋实大哥与战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...
- Codeforces Round #247 (Div. 2) ABC
Codeforces Round #247 (Div. 2) http://codeforces.com/contest/431 代码均已投放:https://github.com/illuz/Wa ...