`

Gallery的使用之三

 
阅读更多

           Gallery实现从指定目录读取文件 画廊似展示图片

GalleryPictureShowActivity

           

package com.lenovo.halo.gallery;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewSwitcher;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Gallery.LayoutParams;

public class GalleryPictureShowActivity extends Activity implements
		AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {
	private static final String TAG = "MyLauncher";
	private List<String> ImageList;
	private String[] list;
	private ImageSwitcher mSwitcher;
	int current = 0;
	String photoURL;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// //去掉状态栏,且显示自己程序名称
		  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
		  WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.pictureshow);
		ImageList = new ArrayList<String>();
		ImageList = getSD();

		list = ImageList.toArray(new String[ImageList.size()]);

		mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
		mSwitcher.setFactory(this);

		mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
				android.R.anim.fade_in));

		mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
				android.R.anim.fade_out));
		mSwitcher.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
//				Toast.makeText(BgPictureShowActivity.this, "点击了",
//						1).show();

			}

		});

		Gallery g = (Gallery) findViewById(R.id.mygallery);

		g.setAdapter(new ImageAdapter(this, getSD()));

		g.setOnItemSelectedListener(this);

		g.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) {
				Toast.makeText(GalleryPictureShowActivity.this, position+"",
						1).show();
		 
			}
		});
	}

	private List<String> getSD() {

		List<String> it = new ArrayList<String>();

		String path = Environment.getExternalStorageDirectory() + "";
		Log.e("path", "+++++++++++" + path);
		File f = new File(path);

		// File f = new File("/sdcard/");
		File[] files = f.listFiles();
		for (int i = 0; i < files.length; i++) {
			File file = files[i];
			if (getImageFile(file.getPath()))
				it.add(file.getPath());
		}
		return it;
	}

	private boolean getImageFile(String fName) {
		boolean re;

		String end = fName
				.substring(fName.lastIndexOf(".") + 1, fName.length())
				.toLowerCase();

		if (end.equals("jpg") || end.equals("gif") || end.equals("png")
				|| end.equals("jpeg") || end.equals("bmp")) {
			re = true;
		} else {
			re = false;
		}
		return re;
	}

	public class ImageAdapter extends BaseAdapter {

		int mGalleryItemBackground;
		private Context mContext;
		private List<String> lis;

		public ImageAdapter(Context c, List<String> li) {
			mContext = c;
			lis = li;

			TypedArray a = obtainStyledAttributes(R.styleable.Gallery);

			mGalleryItemBackground = a.getResourceId(
					R.styleable.Gallery_android_galleryItemBackground, 0);

			a.recycle();
		}

		public int getCount() {
			return lis.size();
		}

		public Object getItem(int position) {
			return position;
		}

		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {

			ImageView i = new ImageView(mContext);

			Bitmap bm = BitmapFactory.decodeFile(lis.get(position).toString());
			i.setImageBitmap(bm);

			i.setScaleType(ImageView.ScaleType.FIT_XY);

			i.setLayoutParams(new Gallery.LayoutParams(136, 88));

			i.setBackgroundResource(mGalleryItemBackground);

			return i;
		}
	}

	public void onItemSelected(AdapterView<?> parent, View view, int position,
			long id) {
		photoURL = list[position];
	
        mSwitcher.setImageURI(Uri.parse(photoURL));

	}

	public void onNothingSelected(AdapterView<?> parent) {
		// TODO Auto-generated method stub

	}

	public View makeView() {
		ImageView i = new ImageView(this);
		i.setBackgroundColor(0xFF000000);
		i.setScaleType(ImageView.ScaleType.FIT_CENTER);
		i.setLayoutParams(new ImageSwitcher.LayoutParams(
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
		return i;
	}

	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		ImageView i = new ImageView(this);
		if (event.getAction() == KeyEvent.ACTION_UP) {
			switch (keyCode) {
			case KeyEvent.KEYCODE_ENTER:
				current++;
				if (current == ImageList.size()) {
					current = 0;
				}
				mSwitcher.setImageURI(Uri.parse(photoURL));

			default:
				break;
			}
		}
		return super.onKeyDown(keyCode, event);
	}
}

 定义的XML


<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#55000000"
    android:orientation="vertical"
    tools:context="com.lenovo.halo.gallery.MainActivity" >

    <ImageSwitcher
        android:id="@+id/switcher"
        android:layout_width="wrap_content"
        android:layout_height="350dip"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true" />

    <Gallery
        android:id="@+id/mygallery"
        android:layout_width="fill_parent"
        android:layout_height="80dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:gravity="center_vertical"
        android:spacing="16dp" />

     
</RelativeLayout>
 

styleable.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Gallery" >

    <attr name="android:galleryItemBackground" />

</declare-styleable>
</resources> 

 在mainfist.xml

  <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

 

 

 

分享到:
评论

相关推荐

    android--Gallery 的基本使用

    本篇文章将深入解析`Gallery`组件的基本使用,以及与其相关的`ImageSwitcher`组件。 首先,我们来看`Gallery`组件。它继承自`AbsSpinner`,并提供了水平滚动的布局方式。`Gallery`通常包含一系列的子视图,如`...

    Gallery 3D效果

    代码可能包括自定义的Gallery子类,以及与之相关的布局文件和资源。通过分析和调试这些代码,可以加深对Android图形和动画系统的理解,从而在自己的应用中实现类似的复杂效果。 总的来说,"Gallery 3D效果"涉及了...

    Gallery+GridView使用的demo

    3. **处理`Gallery`**:同样,在XML布局中定义`Gallery`,并确保它指向与`GridView`相同的适配器,但可能需要对`Gallery`的选中项进行特殊处理,以便在用户切换时更新`GridView`的内容。 4. **监听`Gallery`的滚动...

    android Gallery3D 最新源码

    3. 动画优化:Gallery3D的动画效果平滑而自然,这得益于对动画帧率的控制和GPU加速的使用。 五、扩展性与可定制性 Gallery3D的源码设计考虑了可扩展性,开发者可以方便地自定义数据源、图片加载策略、UI样式等。...

    Android下Gallery控件的使用

    下面将详细介绍`Gallery`控件的使用方法、相关属性以及如何自定义适配器。 一、`Gallery`控件的基本使用 1. 添加依赖:在XML布局文件中添加`Gallery`控件,通常设置`android:id`、`android:layout_width`和`...

    Android_Gallery3D源码(已编译)

    同时,源码还包含了内存缓存策略,如LRU(最近最少使用)缓存,以减少频繁的内存分配和回收,提高性能。 四、用户交互与动画设计 Gallery3D的用户界面设计考虑了触摸操作的便捷性和直观性。`ui`模块包含了大量的...

    Gallery实现了3D效果

    在本案例中,"Gallery实现了3D效果"意味着开发者通过自定义或者利用第三方库对原生`Gallery`进行了扩展,增加了立体、动态的视觉体验,使得图片浏览变得更加生动和吸引人。 首先,我们来详细了解一下`Gallery`的...

    Gallery使用方法

    ### Gallery使用方法详解 #### 一、Gallery简介 Gallery 是 Android 开发中一个非常实用的控件,主要用于展示一系列图片,常用于相册或者产品图片的展示等场景。Gallery 默认会让当前图片居中显示,而当用户需要...

    使用Gallery做出图片层叠效果

    3. 使用专业的UI设计提升视觉体验。 4. 调整滚动速度和动画效果,增强交互感。 通过以上步骤,你就可以在Android应用中成功实现类似iPhone音乐播放器的图片层叠滑动效果了。不过需要注意,Android在后来的版本中...

    Android应用源码之Gallery2.zip

    对于新的Android开发,开发者可以使用RecyclerView配合LinearLayoutManager和SnapHelper来实现类似Gallery的功能,同时享受更强大的定制能力和性能优化。 10. **实战应用** 通过对Gallery源码的深入学习,开发者...

    gallery 3D效果

    9. **多线程加载图片**:如果图片数量较多,为了避免UI阻塞,可以使用异步加载技术(如AsyncTask、Loader或第三方库如 Glide、Picasso)来加载图片。 10. **兼容性问题**:由于自定义控件可能涉及一些硬件加速特性...

    jquery插件TN3Gallery-LITE

    下面将详细介绍TN3Gallery-LITE的核心特性、使用方法以及其组成部分。 **核心特性** 1. **响应式设计**:TN3Gallery-LITE支持响应式布局,可以适应不同设备的屏幕尺寸,无论是桌面、平板还是手机,都能提供良好的...

    Gallery用法实例

    **三、3D Gallery实现** 3D `Gallery`的效果是在2D的基础上增加了一个轻微的3D翻转效果,让滚动更富有立体感。实现3D `Gallery`通常需要自定义`Adapter`和`Gallery`的滚动行为。 1. 自定义`Adapter`:在`getView()...

    gallery3D展示

    3. **触摸事件处理**:由于Gallery3D通常应用于移动端,因此它需要支持触摸手势来控制3D滚动和缩放。这包括识别滑动、捏合、旋转等手势,并将其转换为适当的3D变换。 4. **性能优化**:由于3D渲染可能会消耗大量...

    android 的gallery3d

    Gallery3D是Android操作系统中的一款强大的3D图像查看应用,专为用户提供了独特的三维浏览体验。它不仅是一款高效的图片管理工具,还利用了Android设备的硬件加速功能,实现了流畅的3D动画效果,让用户在手机和平板...

    Android Gallery 3D效果

    `Android Gallery 3D效果`通常是指一种模拟三维空间中的图片滚动效果,使用户感觉图像在空间中旋转。这种效果能够增加应用程序的视觉吸引力,提高用户体验。要实现这样的效果,开发者需要对Android的视图动画、触摸...

    android gallery 3D效果

    在Android平台上,`Gallery`组件曾经是实现3D滚动效果的一种流行方式,它允许用户以横向滑动的方式浏览图片或项目列表,同时提供了一种视觉上的立体感。然而,随着Android版本的更新,`Gallery`组件在API 16...

    Gallery使用教程——尝试翻译一篇Android SDK Reference

    这篇博客“Gallery使用教程——尝试翻译一篇Android SDK Reference”可能详细解释了如何在应用中集成并使用这个组件。由于没有具体的博客内容,我将根据一般知识和Android SDK的相关信息,提供一个关于Gallery组件的...

    Gallery3D效果

    Gallery3D还可以与其他组件结合,如使用Fresco或Glide等图片加载库优化图片加载,或者结合Android的Transition框架实现更复杂的过渡效果。通过这些扩展,Gallery3D不仅可以用于图片浏览,还能应用于视频预览、产品...

    Android应用源码之Gallery_Gallery.zip

    3. **Adapter** - 在Gallery中,通常会使用`BaseAdapter`或其子类来提供数据。Adapter负责将数据转化为可以显示的View,并通过`getView()`方法返回给Gallery。开发者可以通过自定义Adapter来实现个性化的数据展示。 ...

Global site tag (gtag.js) - Google Analytics