一步一步学android控件(之十) —— Gallery

2024-02-23 10:32

本文主要是介绍一步一步学android控件(之十) —— Gallery,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天学习的控件是Gallery。Gallery中每个Item是center-locked,水平的滚动列表。默认使用

Theme_galleryItemBackground 作为默认背景。如果采用另外的Theme作为背景,则需要调整相应的属性。


下面做一个简单的示例:使用Gallery作为容器,显示一系列的图片(准备几张图片放到Drawable目录下),当图片被选重时,用一个动画(从小到大、从模糊到清晰)显示该图片。下图为效果图:



接来下就是一步一步实现该功能:

1、上图界面布局文件 widget_gallery_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><Galleryandroid:id="@+id/show_images_gallery"android:layout_width="match_parent"android:layout_height="120dp" /><ImageViewandroid:id="@+id/gallery_item_big_img"android:layout_width="match_parent"android:layout_height="match_parent"android:src="@drawable/love"android:contentDescription="@string/app_name"android:scaleType="fitCenter"android:adjustViewBounds="true"android:layout_marginTop="20dp" /></LinearLayout>

Gallery用于显示一系列图片,如上图中横着的几张图片;ImageView用于当前选中的图片,如上图中下面的大图。

2、创建activity——WidgetGalleryActivity.java

package com.xy.zt.selfdefinewieget;import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;public class WidgetGalleryActivity extends Activity {private Gallery mGallery;ImageAdapter mImageAdapter;private ImageView mImgBig , mTmpView;Animation mFadeIn;Animation mFadeOut;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.widget_gallery_layout);init();}void init() {mFadeIn = AnimationUtils.loadAnimation(this,R.anim.fade_in);mFadeOut = AnimationUtils.loadAnimation(this,R.anim.fade_out);mImgBig = (ImageView) findViewById(R.id.gallery_item_big_img);mGallery = (Gallery) findViewById(R.id.show_images_gallery);mImageAdapter = new ImageAdapter(this);mGallery.setAdapter(mImageAdapter);mGallery.setOnItemSelectedListener(new OnItemSelectedListener(){public void onItemSelected(AdapterView<?> list, View view,int position, long id) {mTmpView = (ImageView)view.findViewById(R.id.gallery_adapter_img);mImgBig.setImageDrawable(mTmpView.getDrawable());mImgBig.setAnimation(mFadeIn);mFadeIn.start();}public void onNothingSelected(AdapterView<?> arg0) {}});mGallery.setPadding(0, 0, 0, 0);}private static class ImageAdapter extends BaseAdapter {private LayoutInflater mInflater;private int[] imgs = { R.drawable.angry_bird,R.drawable.hello_image_view, R.drawable.image_aver,R.drawable.image_run, R.drawable.love, R.drawable.loveing_gire,R.drawable.qianjing };public ImageAdapter(Context context) {mInflater = LayoutInflater.from(context);}public int getCount() {return imgs.length;}public Object getItem(int pos) {return imgs[pos];}public long getItemId(int pos) {return (pos+imgs.length)%imgs.length;}public View getView(int pos, View convertView, ViewGroup parent) {ViewHolder holder ;if(convertView == null){holder = new ViewHolder();convertView = mInflater.inflate(R.layout.gallery_image_view_item, null);convertView.setTag(holder);}else{holder = (ViewHolder)convertView.getTag();}holder.mImg = (ImageView)convertView.findViewById(R.id.gallery_adapter_img);holder.mImg.setImageResource(imgs[(int)getItemId(pos)]);return convertView;}}private static class ViewHolder{public ImageView mImg;}
}
代码中使用了一个布局文件gallery_image_view_item、动画文件fade_in(随便取名,时机效果如上所述)、ImageAdapter(创建Gallery中的每个item的View)。2.1

2.1 gallery_image_view_item 定义如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="200dp"android:layout_height="120dp"android:background="@color/color_blue" ><ImageViewandroid:id="@+id/gallery_adapter_img"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:adjustViewBounds="true"android:contentDescription="@string/app_name"android:padding="5dp"android:scaleType="matrix"android:src="@drawable/image_aver"/></RelativeLayout>

2.2 fade_in 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="1000" ><alphaandroid:fromAlpha="0"android:toAlpha="1" /><scaleandroid:fromXScale="0.2"android:fromYScale="0.2"android:pivotX="50%"android:pivotY="50%"android:toXScale="1"android:toYScale="1" /></set>

代码中详细内容可参见 Android动画 Tweened Animation 之 AlphaAnimation 和  Android动画 Tweened Animation 之 ScaleAnimation 。


3、主要内容已完成,下面在ViewData和WidgetsAdapter中添加如下内容以完善工程架构:

在ViewData中加入如下内容:

public static final int GALLERY_ID = IMAGE_BTN_ID + 1;public static final String GALLERY_NAME = "Gallery";
private static final ViewData mGallery = new ViewData(GALLERY_NAME, GALLERY_ID);
View_Datas.add(mGallery);

在WidgetsAdapter的handleItemClicked中加入如下事件响应代码:

case ViewData.GALLERY_ID :intent.setClass(mContext, WidgetGalleryActivity.class);mContext.startActivity(intent);break;
此处内容不清楚的参见 一步一步学android控件(之一) —— 开始篇


注:Gallery was deprecated in API level 16 


今天的内容就完成了,下一个控件 Chronometer 。




这篇关于一步一步学android控件(之十) —— Gallery的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738325

相关文章

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使