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" />
相关推荐
本篇文章将深入解析`Gallery`组件的基本使用,以及与其相关的`ImageSwitcher`组件。 首先,我们来看`Gallery`组件。它继承自`AbsSpinner`,并提供了水平滚动的布局方式。`Gallery`通常包含一系列的子视图,如`...
代码可能包括自定义的Gallery子类,以及与之相关的布局文件和资源。通过分析和调试这些代码,可以加深对Android图形和动画系统的理解,从而在自己的应用中实现类似的复杂效果。 总的来说,"Gallery 3D效果"涉及了...
3. **处理`Gallery`**:同样,在XML布局中定义`Gallery`,并确保它指向与`GridView`相同的适配器,但可能需要对`Gallery`的选中项进行特殊处理,以便在用户切换时更新`GridView`的内容。 4. **监听`Gallery`的滚动...
3. 动画优化:Gallery3D的动画效果平滑而自然,这得益于对动画帧率的控制和GPU加速的使用。 五、扩展性与可定制性 Gallery3D的源码设计考虑了可扩展性,开发者可以方便地自定义数据源、图片加载策略、UI样式等。...
下面将详细介绍`Gallery`控件的使用方法、相关属性以及如何自定义适配器。 一、`Gallery`控件的基本使用 1. 添加依赖:在XML布局文件中添加`Gallery`控件,通常设置`android:id`、`android:layout_width`和`...
同时,源码还包含了内存缓存策略,如LRU(最近最少使用)缓存,以减少频繁的内存分配和回收,提高性能。 四、用户交互与动画设计 Gallery3D的用户界面设计考虑了触摸操作的便捷性和直观性。`ui`模块包含了大量的...
在本案例中,"Gallery实现了3D效果"意味着开发者通过自定义或者利用第三方库对原生`Gallery`进行了扩展,增加了立体、动态的视觉体验,使得图片浏览变得更加生动和吸引人。 首先,我们来详细了解一下`Gallery`的...
### Gallery使用方法详解 #### 一、Gallery简介 Gallery 是 Android 开发中一个非常实用的控件,主要用于展示一系列图片,常用于相册或者产品图片的展示等场景。Gallery 默认会让当前图片居中显示,而当用户需要...
3. 使用专业的UI设计提升视觉体验。 4. 调整滚动速度和动画效果,增强交互感。 通过以上步骤,你就可以在Android应用中成功实现类似iPhone音乐播放器的图片层叠滑动效果了。不过需要注意,Android在后来的版本中...
对于新的Android开发,开发者可以使用RecyclerView配合LinearLayoutManager和SnapHelper来实现类似Gallery的功能,同时享受更强大的定制能力和性能优化。 10. **实战应用** 通过对Gallery源码的深入学习,开发者...
9. **多线程加载图片**:如果图片数量较多,为了避免UI阻塞,可以使用异步加载技术(如AsyncTask、Loader或第三方库如 Glide、Picasso)来加载图片。 10. **兼容性问题**:由于自定义控件可能涉及一些硬件加速特性...
下面将详细介绍TN3Gallery-LITE的核心特性、使用方法以及其组成部分。 **核心特性** 1. **响应式设计**:TN3Gallery-LITE支持响应式布局,可以适应不同设备的屏幕尺寸,无论是桌面、平板还是手机,都能提供良好的...
**三、3D Gallery实现** 3D `Gallery`的效果是在2D的基础上增加了一个轻微的3D翻转效果,让滚动更富有立体感。实现3D `Gallery`通常需要自定义`Adapter`和`Gallery`的滚动行为。 1. 自定义`Adapter`:在`getView()...
3. **触摸事件处理**:由于Gallery3D通常应用于移动端,因此它需要支持触摸手势来控制3D滚动和缩放。这包括识别滑动、捏合、旋转等手势,并将其转换为适当的3D变换。 4. **性能优化**:由于3D渲染可能会消耗大量...
Gallery3D是Android操作系统中的一款强大的3D图像查看应用,专为用户提供了独特的三维浏览体验。它不仅是一款高效的图片管理工具,还利用了Android设备的硬件加速功能,实现了流畅的3D动画效果,让用户在手机和平板...
`Android Gallery 3D效果`通常是指一种模拟三维空间中的图片滚动效果,使用户感觉图像在空间中旋转。这种效果能够增加应用程序的视觉吸引力,提高用户体验。要实现这样的效果,开发者需要对Android的视图动画、触摸...
在Android平台上,`Gallery`组件曾经是实现3D滚动效果的一种流行方式,它允许用户以横向滑动的方式浏览图片或项目列表,同时提供了一种视觉上的立体感。然而,随着Android版本的更新,`Gallery`组件在API 16...
这篇博客“Gallery使用教程——尝试翻译一篇Android SDK Reference”可能详细解释了如何在应用中集成并使用这个组件。由于没有具体的博客内容,我将根据一般知识和Android SDK的相关信息,提供一个关于Gallery组件的...
Gallery3D还可以与其他组件结合,如使用Fresco或Glide等图片加载库优化图片加载,或者结合Android的Transition框架实现更复杂的过渡效果。通过这些扩展,Gallery3D不仅可以用于图片浏览,还能应用于视频预览、产品...
3. **Adapter** - 在Gallery中,通常会使用`BaseAdapter`或其子类来提供数据。Adapter负责将数据转化为可以显示的View,并通过`getView()`方法返回给Gallery。开发者可以通过自定义Adapter来实现个性化的数据展示。 ...