【Android】内存卡图片读取器,图库app

上一篇《【Android】读取sdcard卡上的所有图片并且显示,读取的过程有进度条显示》(点击打开链接)在真机上测试很有问题,经常遇到内存溢出,卡死的情况。因为现在真机上的内存上,2G已经很少见了,基本上都8G的样子了。由于把读取出来的图片一次性地放到app上,而且读取的过程中,又没有正在读取到哪个文件,虽然能够在AVD安卓模拟器上完成基本的功能,但是这个app很不友好。因此采用Handler、Message配合线程等安卓消息机制,完成读取过程,并且利用GridView把读取到的图片显示出来。改进这个内存卡图片读取器,具体效果如下,基本是可以媲美部分安卓系统自带的图库了吧……就差个对文件夹的分类而已了……

一开始,在读取的过程,有读取进度的显示,具体读取到哪个文件夹。这对于大内存卡很有意义,我的8G内存卡亲测,仅30秒完成读取。

之后,用网格视图把图片显示出来。点击图片可以查看图片的大图,,与图片的路径。

在app的右上角可以退出。

当然本app也完成对返回键的监听。返回键也能够退出。这个在《【Android】各式各样的弹出框与对菜单键、返回键的监听》(点击打开链接)已经说过了,这里不再赘述。

1、首先修改res\values\strings.xml,设置各个字符,如下。作者什么的,请忽略这些细节!

<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">内存卡图片查看器</string><string name="menu_author">作者:yongh701</string><string name="menu_exit">退出</string><string name="img_description">大图</string><string name="view_button1">返回</string></resources>2、之后修改菜单的字符文件res\menu\main.xml如下,一个配置到MainActivity.java当中,这个在《【Android】日期拾取器、时间拾取器与菜单》(点击打开链接)已经说过了。这里不再赘述。

<menu xmlns:android="" ><itemandroid:id="@+id/menu_exit"android:title="@string/menu_exit"/><item android:title="@string/menu_author"/></menu>3、随后完成AndroidManifest.xml的修改,要求系统对本app赋予SDCard的读写权限。同时,因为app查看大图要用另一个Activity,这里同时在这里注册查看大图的ViewActivity,该文件修改如下:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="com.sdcard_read_all"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!– 要求向SDCard读取数据权限 –><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!– 要求向SDCard写入数据权限 –><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.sdcard_read_all.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name="com.sdcard_read_all.ViewActivity"android:label="@string/img_description" > <!– 注册ViewActivity –></activity></application></manifest>4、其实之后的过程,与《【Android】图片资源的访问与网格式图片浏览器》(点击打开链接)是一样的。先修改MainActivity的布局文件res\layout\activity_main.xml,布置一个网格布局GridView,当然,同时布置一个TextView,用于在读取完成之前,显示读取信息,此文件修改之后如下:

<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="36sp" /><GridViewandroid:id="@+id/gridView1"android:layout_width="match_parent"android:layout_height="match_parent"android:numColumns="2" ></GridView></LinearLayout>5、同时在res\layout\新建一个查看大图的的ViewActivity的布局文件activity_view.xml,这里和《【Android】画廊式的图片浏览器,使用HorizontalScrollView取代Gallery,OnClickListener的参数传递》(点击打开链接)同理,只不过是在一个垂直滚动布局下,新建一个线性子布局LinearLayout。这样就不用担心组件的超过一屏,可以达到滚动效果。线性布局的滚动条就是这样做的。三个组件皆沾满屏幕宽度,同时分别赋予id,一会儿通过ViewActivity.java赋予相应的值。其中图片视图ImageView配置的adjustViewBounds与scaleType,让其自动缩放大小。android:contentDescription="@string/img_description"是图片的描述,不赋予,Eclipse会出现警告。

<ScrollView xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:scrollbars="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><TextViewandroid:id="@+id/textView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="24sp" /><ImageViewandroid:id="@+id/imageView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:adjustViewBounds="true"android:scaleType="centerInside"android:paddingTop="10dp"android:paddingBottom="10dp"android:contentDescription="@string/img_description" /><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/view_button1"android:textSize="24sp" /></LinearLayout></ScrollView>

谁是谁生命的点缀。

【Android】内存卡图片读取器,图库app

相关文章:

你感兴趣的文章:

标签云: