绚丽的自定义Gallery android教程

  次阅读 作者:智能小宝 来源:互联网 2015-10-03 10:41 我要评论(0)

相信大家对Gallery这个控件是再喜爱不过了,用它可以做出很炫的效果,这得意于Android优良的架构和MVC设计模式的

便利。下面我会介绍一个比较炫的自定义的Gallery效果。先上效果图:

\\

如图,主要效果包括,中央文字变大,变亮,出现倒影,未选中项变小,变暗,gallery减慢滑动速度,循环gallery展

示。

由于涉及公司项目,这里只贴关键代码和xml文档。

首先默认的Gallery滑动时,滚动速度很快,会导致某些项一闪而过看不清楚,解决的办法是继承Gallery,自定义一个

CustomGallery类,覆盖Gallery的onFling()方法,让它返回false就行了,代码如下

package com.widget;

import android.content.Context;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.widget.Gallery;

public class CustomGallery extends Gallery {

public CustomGallery(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

return false;

}

}

接下来就是在xml文件中如何调用这个自定义的控件类的问题,解决方法很简单

<LinearLayout android:id="@+id/gallerylayout"

android:layout_width="fill_parent" android:layout_height="fill_parent">

<com.widget.CustomGallery

android:layout_width="fill_parent" android:layout_height="wrap_content"

android:spacing="10dip" android:unselectedAlpha="0.5" android:id="@+id/gallery"

android:layout_marginTop="36dip" />

</LinearLayout>

需要注意的是,Android支持的自定义控件类的构造函数,需要有Context和AttributeSet两个参数,否则会报异常!

另外

android:unselectedAlpha="0.5"

这个属性可以设置未选中项的半透明度,设置为0.5,这样有突显选中项的效果。

此时运行程序并不能显示我们自定义的Gallery,原因是,我们还没有向Gallery中添加数据,而向Gallery中添加数据需

要使用

Gallery的setAdapter方法,通过适配器来进行添加显示项,这里我们把大学的名称作为显示数据加入到适配器中,由于需要处理选

中项的倒影效果和变大效果,于是我们自定义一个Adapter来进行处理,代码如下

根据MVC,先是数据模型类University

public class University{

private String name; // 学校名称

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

然后是自定义的Adapter

public import java.util.ArrayList;

import com.model.Channel;

import com.util.BitmapUtil;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

public class UniversityAdapter extends BaseAdapter {

private Context context;

private ArrayList<University> universityList;

public UniversityAdapter(Context context, ArrayList<University> universityList) {

this.context = context;

this.universityList = universityList;

}

//这里返回一个较大整数是为了实现Gallery的循环播放

@Override

public int getCount() {

// TODO Auto-generated method stub

return Integer.MAX_VALUE;

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...