Android开发实现Gallery画廊效果的方法

本文实例讲述了Android开发实现Gallery画廊效果的方法。分享给大家供大家参考,具体如下:

画廊 使用Gallery表示,按水平方向显示内容,并且可以用手指直接拖动图片移动,一般用来浏览图片,被选中的选项位于中间,可以响应事件显示信息。

xml布局文件基本语法

<Gallery
属性列表
/>

Gallery支持4中xml属性


属性名称

描述

android:animationDuration

设置布局变化时动画的转换所需的时间(毫秒级)。仅在动画开始时计时。该值必须是整数,比如:100。

android:gravity

指定在对象的X和Y轴上如何放置内容。指定一下常量中的一个或多个(使用 “|”分割)

Constant
Value

Description

top

0×30

紧靠容器顶端,不改变其大小

bottom

0×50

紧靠容器底部,不改变其大小

left

0×03

紧靠容器左侧,不改变其大小

right

0×05

紧靠容器右侧,不改变其大小

center_vertical

0×10

垂直居中,不改变其大小

fill_vertical

0×70

垂直方向上拉伸至充满容器

center_horizontal

0×01

水平居中,不改变其大小

Fill_horizontal

0×07

水平方向上拉伸使其充满容器

center

0×11

居中对齐,不改变其大小

fill

0×77

在水平和垂直方向上拉伸,使其充满容器

clip_vertical

0×80

垂直剪切(当对象边缘超出容器的时候,将上下边缘超出的部分剪切掉)

clip_horizontal

0×08

水平剪切(当对象边缘超出容器的时候,将左右边缘超出的部分剪切掉)

android:spacing

(译者注:设置图片之间的间距)

android:unselectedAlpha

设置未选中的条目的透明度(Alpha)。该值必须是float类型,比如:“1.2”

效果的具体实现过程

layout:

<?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" >
  <Gallery
    android:id="@+id/gallery"
    android:spacing="5px"     //设置列表项之间的间距为5像素
    android:unselectedAlpha="0.5" //设置未被选中的列表项的透明度
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

Activity:

package xqx;
import com.example.xqx_lianxi.R;
import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
public class MainGallery extends Activity{
   //设置画廊图片
  private int[] imageId = new int[] { R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_gallery);
    //获取Gallery组件
    Gallery gallery = (Gallery) findViewById(R.id.gallery);
    BaseAdapter adapter = new BaseAdapter() {
        //获取当前选项ID
        @Override
        public long getItemId(int position) {
          return position;
        }
        //获取当前选项值
        @Override
        public Object getItem(int position) {
          return position;
        }
        //获取数量
        @Override
        public int getCount() {
          return imageId.length;
        }
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageview;  //声明ImageView的对象
        if (convertView == null) {
          imageview = new ImageView(MainGallery.this); //创建ImageView的对象
          imageview.setScaleType(ImageView.ScaleType.FIT_XY); //设置缩放方式
          imageview.setLayoutParams(new Gallery.LayoutParams(500, 400));
          TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
          imageview.setBackgroundResource(typedArray.getResourceId(
              R.styleable.Gallery_android_galleryItemBackground,
              0));
          imageview.setPadding(5, 0, 5, 0); //设置imageview的内边距
        }
        else
        {
          imageview = (ImageView) convertView;
        }
        imageview.setImageResource(imageId[position]);
        return imageview;
      }
    };
      //将适配器与Gallery关联
      gallery.setAdapter(adapter);
      gallery.setSelection(imageId.length / 2); //默认显示的图片的id
      //画廊图片的点击事件
      gallery.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
          Toast.makeText(MainGallery.this,
              "第" + String.valueOf(position+1) + "张图片被选中",
              Toast.LENGTH_SHORT).show();
        }
      });
}
}

最后在res/values/string.xml中添加一段代码  ,这里对应activity中的51行

<declare-styleable name="Gallery">
    <attr name="android:galleryItemBackground" />
</declare-styleable>

这样便完成了一个画廊的效果

效果图:

可以看到 一共有6张图片 默认显示第4张

gallery.setSelection(imageId.length / 2); //默认显示的图片的id

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android开发学习笔记 Gallery和GridView浅析

    一.Gallery的简介 Gallery(画廊)是一个锁定中心条目并且拥有水平滚动列表的视图,一般用来浏览图片,并且可以响应事件显示信息.Gallery还可以和ImageSwitcher组件结合使用来实现一个通过缩略图来浏览图片的效果. Gallery常用的XML属性 属性名称 描述 android:animationDuration 设置布局变化时动画的转换所需的时间(毫秒级).仅在动画开始时计时.该值必须是整数,比如:100. android:gravity 指定在对象的X和Y轴上如何放置内

  • Android viewpager 3D画廊的实现方法

    ViewPager有个方法叫做: setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer) 用于设置ViewPager切换时的动画效果. 这里我们只要自定义一个PageTransformer来实现我们需要的动画偏移效果就好了! public class ScrollOffsetTransformer implements PageTransformer { private static final f

  • Android从系统Gallery获取图片具体实现

    前言 在Android应用中,经常有场景会需要使用到设备上存储的图片,而直接从路径中获取无疑是非常不便利的.所以一般推荐调用系统的Gallery应用,选择图片,然后使用它.本篇博客将讲解如何在Android中通过系统Gallery获取图片. Gallery应用 Android原生内置了很多App,而Gallery为图库,用于操作设备上的图片,它会在开机的时候主动扫描设备上存储的图片,并可以使用Gallery操作它们.既然要使用Gallery,那么先看看它的AndroidManifest.xml清

  • Android App开发中使用RecyclerView实现Gallery画廊的实例

    什么是RecyclerView         RecyclerView是Android 5.0 materials design中的组件之一,相应的还有CardView.Palette等.看名字我们就能看出一点端倪,没错,它主要的特点就是复用.我们知道,Listview中的Adapter中可以实现ViewHolder的复用.RecyclerView提供了一个耦合度更低的方式来复用ViewHolder,并且可以轻松的实现ListView.GridView以及瀑布流的效果. RecyclerVie

  • Android ViewPager画廊效果详解及实例

    Android ViewPager 画廊效果 从上面的图片可以看到,当添加多张图片的时候,能够在下方形成一个画廊的效果,我们左右拉动图片来看我们添加进去的图片,效果是不是好了很多呢?下面来看看怎么实现吧! 上面的效果类似Android里面ViewPage的效果,但是跟ViewPager有所不同,ViewPager每次只能显示一张图片. 其实我们是利用到了View的clipChildren属性,我们在这里要把ViewPager以及它的父窗体都设置为false,如下: android:clipChi

  • 怎样删除android的gallery中的图片实例说明

    复制代码 代码如下: /*长按gallery中的图片进行删除该图片的操作*/ gallery.setOnItemLongClickListener(new OnItemLongClickListener(){ @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) { // TODO Auto-generated method stub new Ale

  • Android入门之Gallery+ImageSwitcher用法实例解析

    继上一篇介绍了如何使用Gallery控件之后,本文就来讲一下Gallery 与ImageSwitcher的结合使用.本文所述实例代码将实现一个简单的浏览图片的功能. 先贴出程序运行截图如下: 除了Gallery可以拖拉切换图片,我在ImageSwitcher控件加入了setOnTouchListener事件实现,使得ImageSwitcher也可以在拖拉中切换图片.本例子依然使用JAVA的反射机制来自动读取资源中的图片. main.xml的源码如下: <?xml version="1.0&

  • Android利用ViewPager实现可滑动放大缩小画廊效果

    画廊在很多的App设计中都有,如下图所示: 该例子是我没事的时候写的一个小项目,具体源码地址请访问https://github.com/AlexSmille/YingMi. 该画廊类似封面的效果,滑到中间的图片会慢慢变大,离开的View会慢慢的缩小,同时可设置滑动监听和点击监听. 网上有很多例子都是通过Gallery实现的,而上例的实现是通过ViewPager实现,解决了性能优化的问题,今天特此把它抽出来,封装一下,以便以后的方便使用.最终实现的效果如下: 使用方式 布局中添加该自定义控件 <R

  • Android入门之Gallery用法实例解析

    本文实例介绍的Android的Gallery控件是个很不错的看图控件,可以大大减轻开发者对于看图功能的开发,并且效果也很美观.本文实例中的Gallery的用法,主要实现用反射机制来动态读取资源中的图片. 该实例代码运行的效果图如下: main.xml源码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android

  • Android控件Gallery3D效果实例代码

    贴上代码: 1.扩展Gallery: 复制代码 代码如下: public class GalleryFlow extends Gallery { private Camera mCamera = new Camera();//相机类 private int mMaxRotationAngle = 60;//最大转动角度 private int mMaxZoom = -300;////最大缩放值 private int mCoveflowCenter;//半径值 public GalleryFlo

  • Android画廊效果之ViewPager显示多个图片

    首先来看下ViewPager显示多个图片效果: 从上面的图片可以看到,当添加多张图片的时候,能够在下方形成一个画廊的效果,我们左右拉动图片来看我们添加进去的图片,效果是不是好了很多呢?下面来看看怎么实现吧! 上面的效果类似Android里面ViewPage的效果,但是跟ViewPager有所不同,ViewPager每次只能显示一张图片. 其实我们是利用到了View的clipChildren属性,我们在这里要把ViewPager以及它的父窗体都设置为false,如下: android:clipCh

随机推荐