美女图片查看器——Gallery橱窗效果的实现

先看一下效果图

主界面的布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.jeffery.actionbar.gallerydemo.MainActivity" tools:showIn="@layout/app_bar_main">    <!--背景大图-->    <ImageView  android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/bg_1" />    <!--窗口-->    <Gallery  android:id="@+id/gallery" android:layout_alignParentBottom="true" android:spacing="5dp" android:layout_width="match_parent" android:layout_height="wrap_content" >    </Gallery></RelativeLayout>

下面是MainActivity 的部分代码,要注意无线循环

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {    private Gallery gallery;    private ImageView iv;    //图片集    private Integer[] image = {            R.drawable.bg_1,            R.drawable.bg_2,            R.drawable.bg_3,            R.drawable.bg_4,            R.drawable.bg_5,            R.drawable.bg_6,            R.drawable.bg_7,            R.drawable.bg_8,            R.drawable.bg_9,    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        initView();        initData();        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);        drawer.setDrawerListener(toggle);        toggle.syncState();        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);        navigationView.setNavigationItemSelectedListener(this);    }    private void initView() {        gallery = (Gallery)findViewById(R.id.gallery);        iv = (ImageView)findViewById(R.id.iv);    }    private void initData() {        ImageAdapter adapter =  new ImageAdapter(this,image);        gallery.setAdapter(adapter);        //初始化的时候默认选中初始的位置(就和初始位置为0时一样)        int indext = (Integer.MAX_VALUE / 2)-(Integer.MAX_VALUE / 2)%image.length;        gallery.setSelection(indext);        //设置gallery的点击事件        gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show();                //设置背景图                iv.setImageResource(image[position%image.length]);            }        });    }

ImageAdapter代码块,要注意一下TypedArray的使用,主要是为了获得attr中GalleryDemo的属性

package com.jeffery.actionbar.gallerydemo;import android.content.Context;import android.content.res.TypedArray;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Gallery;import android.widget.ImageView;import com.jeffery.actionbar.gallerydemp.R;/** * Created by JefferyAnd on 2015/11/26. */public class ImageAdapter extends BaseAdapter {    private Context mContext;    private Integer[] image;    private int galleryBackground;//背景    public ImageAdapter(Context mContext, Integer[] image) {        this.mContext = mContext;        this.image = image;        TypedArray a = mContext.obtainStyledAttributes(R.styleable.GalleryDemo);//为了获得attr中GalleryDemo的属性        galleryBackground = a.getResourceId(R.styleable.GalleryDemo_android_galleryItemBackground, 0);        a.recycle();//否则会对下次造成影响    }    @Override    public int getCount() {// return image.length;        return Integer.MAX_VALUE;    }    @Override    public Object getItem(int position) {        return image[position];    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ImageView view = new ImageView(mContext);// view.setImageResource(image[position]);        view.setImageResource(image[position % image.length]);        view.setLayoutParams(new Gallery.LayoutParams(120, 160));        view.setScaleType(ImageView.ScaleType.FIT_XY);        view.setBackgroundResource(galleryBackground);        return view;    }}

attr.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="GalleryDemo">        <attr name="android:galleryItemBackground"></attr>    </declare-styleable></resources>

demo下载地址:
http://pan.baidu.com/s/1o6s3Gtc

更多相关文章

  1. Android使adb作为host运行在arm64平台
  2. ExpandableListView
  3. Android(安卓)progressBar代码设置进度条颜色、背景颜色以及圆角
  4. Android(安卓)属性动画(二)
  5. 安卓自定义属性,Android(安卓)studio无法提示,只提示3个
  6. android按屏幕大小动态确定控件位置及大小
  7. Caused by: java.lang.IllegalStateException: You need to use
  8. Android(安卓)Enter软件盘监听事件。
  9. DelphiXE Android的所有权限按照分类总结说明

随机推荐

  1. Android进程的内存管理分析
  2. Android简明开发教程一:概述
  3. Android(安卓)之 ViewTreeObserver 全面
  4. android通过xml实现圆形头像
  5. Android中数据存储——文件存储数据
  6. Android(安卓)Notification 通知的使用,不
  7. Android菜鸟的成长笔记(13)——异步任务(Asy
  8. Android NDK开发环境安装(OK版)
  9. 老罗的Android之旅——Android应用程序的
  10. Android apk 安装到sd卡