从一个指定的目录文件下取图片显示可以左右滑动
例子显示的是从sdcard卡文件读取图片,并显示出来,判断当前是否有要读取的路径,如果有的话当前路径下是否有图片的判定
package com.lenovo.halo.gallery; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.os.PowerManager.WakeLock; //import android.os.LauncherSyncManager; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; public class MainActivity extends Activity { private static final String TAG = "MyLauncher"; private MyHandler m_h; private ImageView i; private List<String> ImageList; private String[] list; // private int[] ids = { // R.drawable.p12, // R.drawable.p13, // R.drawable.p1, // R.drawable.p2, // R.drawable.p3, // R.drawable.p4, // R.drawable.p5, // R.drawable.p6, // R.drawable.p7, // R.drawable.p8, // R.drawable.p9, // R.drawable.p10, // R.drawable.p11 // // //no5test add img here!!!!!!! // }; int current = 0; TextView no_image; ImageView down_image,up_image; @Override protected void onCreate(Bundle savedInstanceState) { Log.i(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); i = (ImageView) findViewById(R.id.image); no_image = (TextView) findViewById(R.id.no_image); up_image=(ImageView)findViewById(R.id.up_image); down_image=(ImageView)findViewById(R.id.down_image); ImageList = getSD(); Log.i(TAG, "ImageList.size()" + ImageList.size()); if (ImageList.size() > 0) { list = ImageList.toArray(new String[ImageList.size()]); Log.i(TAG, "ImageList.size()>0"); i.setImageURI(Uri.parse(list[current])); PowerManager a = (PowerManager) getSystemService(Context.POWER_SERVICE); WakeLock w = a.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG); w.acquire(); i.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub current++; if (current == list.length) { current = 0; } m_h.removeMessages(1); Message message1 = new Message(); message1.what = 1; m_h.sendMessage(message1); return false; } }); m_h = new MyHandler(); } else { no_image.setText("当前目录下没有可以显示的图片"); up_image.setVisibility(View.GONE); down_image.setVisibility(View.GONE); } // i.setImageResource(ids[current]); } private List<String> getSD() { List<String> it = new ArrayList<String>(); // String path = Environment.getExternalStorageDirectory() + ""; String path = "/data/imagedir/"; // File f = new File("/sdcard/"); Log.e("TEST", "+++++++++++" + path); File f = new File(path); File[] files = f.listFiles(); if (f.exists()) { File f1=new File(path+"/miwen.txt"); try { f1.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block Log.e("TEST",e.toString()); } if (files.length > 0) { for (int i = 0; i < files.length; i++) { File file = files[i]; if (getImageFile(file.getPath())) it.add(file.getPath()); } } else { no_image.setText("当前目录下没有可以显示的图片"); } } else { no_image.setText("您指定的目录不存在"); } 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; } class MyHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: // i.setImageResource(ids[current]); if(list!=null&&list.length>0){ i.setImageURI(Uri.parse(list[current])); Log.e(TAG, "current img is" + list[current] + "id is " + current); } break; } } } // @Override // public boolean onKeyUp(int keyCode, KeyEvent event) { // Log.e(TAG, "current img is" + list[current] + "id is " + current // + "event is" + event.getAction()); // if (event.getAction() == KeyEvent.ACTION_UP) { // switch (keyCode) { // case KeyEvent.KEYCODE_ENTER: // current++; // if (current == list.length) { // current = 0; // } // // // i.setImageResource(list[current]); // i.setImageURI(Uri.parse(list[current])); // // default: // break; // } // } // return super.onKeyDown(keyCode, event); // } @Override protected void onPause() { Log.i(TAG, "onPause"); this.finish(); System.exit(0); super.onPause(); } }
定义的XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.lenovo.halo.gallery.MainActivity" > <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="fitXY" /> <ImageView android:id="@+id/up_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@drawable/up"/> <ImageView android:id="@+id/down_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:src="@drawable/down" /> <TextView android:id="@+id/no_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
在mainfast.xml里边定义读取的sdk权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
相关推荐
总结,"Android应用源码之Gallery2.zip"为我们提供了一个学习Android自定义组件和手势识别的宝贵资源。通过对源码的分析,我们可以更好地理解和控制用户界面的行为,从而提升应用的交互性和性能。虽然Gallery已被弃...
Gallery是Android平台上一个经典的图片浏览组件,它在早期版本的Android系统中被广泛使用,用于展示和选择图片。这个源码分析将深入探讨Gallery组件的工作原理、关键类和方法,以及如何自定义和优化它。 首先,让...
Gallery是Android平台上一个用于展示图片或视频的控件,它在早期版本的Android SDK中被广泛使用,提供了用户浏览媒体内容的滚动界面。这个"Gallery1_Gallery.zip"压缩包很可能是包含了一个示例项目,展示了如何在...
在Android开发中,`Gallery`组件是用于展示一系列图片或者视图的一种滚动控件,它允许用户通过左右滑动来浏览各个项目。`Gallery`在早期版本的Android API中被广泛使用,但在API 16之后已被弃用,取而代之的是更现代...
代码可能包括自定义的Gallery子类,以及与之相关的布局文件和资源。通过分析和调试这些代码,可以加深对Android图形和动画系统的理解,从而在自己的应用中实现类似的复杂效果。 总的来说,"Gallery 3D效果"涉及了...
本篇文章将深入探讨如何实现`Gallery`选中时的放大动画效果,以及与之相关的技术细节。 首先,我们需要理解`Gallery`的基本用法。`Gallery`继承自`AbsSpinner`,可以包含一系列`View`对象,如`ImageView`来展示图片...
Gallery2是一个针对Android平台的开源图片浏览应用,其源码为我们提供了一个深入理解Android系统中图片展示、手势操作以及图片库集成的实例。通过分析这个项目,我们可以学习到许多关于Android开发的重要知识点。 ...
"Gallery画廊控件"是Android SDK中一个独特的视图组件,它允许用户在一个水平滚动的列表中展示项目,通常用于图片或选择项的浏览。在本教程中,我们将深入探讨Gallery控件的用法、属性以及如何自定义它。 首先,...
以下是对"android4.2应用程序源码之Gallery2"的详细分析: 1. **相册应用结构**:Gallery2应用程序由多个组件构成,包括Activity、Adapter、Fragment和Service等。这些组件共同协作,实现图片和视频的浏览、选择、...
"Gallery画廊之基础"这一主题主要关注的是在Android系统中使用Gallery组件进行图片或媒体文件展示的基础知识。Gallery是一个旧版的Android组件,主要用于在水平轴上展示一系列的项目,用户可以左右滑动来浏览。尽管...
在Android应用开发中,"Gallery"组件是一种非常实用的控件,它允许用户通过水平滑动来浏览一系列的项目,通常用于图片或者选项的选择。然而,随着Android版本的更新,Gallery组件的用法和外观也发生了变化。这篇教程...
ContentProvider作为Android四大组件之一,是不同应用程序之间共享数据的关键。它封装了SQLite数据库,用于存储和检索媒体文件信息。同时,ContentResolver作为客户端与ContentProvider之间的桥梁,提供了方便的接口...
该插件以其出色的功能和强大的自定义选项,成为了网页设计师和开发者们喜爱的工具之一。下面将详细介绍TN3Gallery-LITE的核心特性、使用方法以及其组成部分。 **核心特性** 1. **响应式设计**:TN3Gallery-LITE...
本文将详细探讨"gallery-3.0.1.zip"这一版本的相册应用,它代表了相册软件的一个重要里程碑——Gallery 3.0.1。我们将从其核心功能、界面设计、性能优化等多个角度展开讨论,旨在揭示这款应用的独特之处和改进之处。...
在安卓开发领域,深入理解源码是提升技能的重要途径之一。这里我们关注的是“Gallery2”模块,它是Android系统中的一个图像浏览应用,主要用于展示和管理用户的照片。Gallery2源码的分析将帮助开发者更深入地了解...
将`Gallery`和`ImageSwitcher`结合使用,可以实现一个图片轮播的效果。首先,在布局文件中添加`Gallery`和`ImageSwitcher`,并设置它们的属性。`Gallery`的适配器通常是一个自定义的`ArrayAdapter`或`CursorAdapter`...
然而,了解并处理各种编码格式是开发者必备的技能之一,特别是在处理来自不同源的数据时。 7. **适配器(Adapter)**: 在自定义的Gallery中,适配器是连接数据源和视图的关键。Adapter负责填充数据到每个项,并确保...
在这个场景中,开发者需要一个自定义的Gallery轮播图,其中下标显示在轮播图下方,而不是覆盖在图片之上,并且在切换时能有平滑的缩放效果。下面将详细介绍这个自定义轮播图实现的关键知识点。 首先,`Gallery`是...
在这个场景中,开发者希望实现每个`Gallery`项(item)被选中时,在屏幕下方显示与之对应的详细视图(view)。以下是对这个功能的详细解释和实现方法。 首先,我们需要了解`Gallery`的基本用法。`Gallery`继承自`...