素人のアンドロイドアプリ開発日記

画像をスライドショーとして表示する。完成:ファイル一式。

2011.03.30

画像をギャラリー形式での表示を行います。

何度か、「画像をスライドショーとして表示をする。」として、行ってきました。

画像をスライドショーとして表示する。SDカードの認識

画像をスライドショーとして表示する。画像のファイルにアクセス

画像をスライドショーとして表示する。画像のファイルを読み込む

画像をスライドショーとして表示する。BaseAdapterでAdapterを作る。

下記の形でスライドショーを完成できました!

 

ゼロからのAndroidアプリケーション開発入門

を参考に改良したものを作成させていただいております。

 

レイアウトとしては、下記のような、形で、上にサムネイル。下に表示領域を用意する。

gallery

 

最初にmain.xmlは下記のような形になります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
 <Gallery 
 android:layout_height="wrap_content" 
 android:id="@+id/gallery1" 
 android:layout_width="fill_parent"></Gallery>
 <ImageView 
 android:layout_height="fill_parent" 
 android:src="@drawable/icon" 
 android:id="@+id/imageView1" 
 android:layout_width="fill_parent"></ImageView>
</LinearLayout>

レイアウトはlinearLayoutを用いて、Galleryは高さがwrap_contentで、ImageViewの方はfill_parentとして、イメージの部分を使いやすいようにしておく。

SlideGallery.javaは下記のようになる。

package in.andante.slide;

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

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemClickListener;

public class SlideGallery extends Activity implements DialogInterface.OnClickListener,OnItemClickListener,Runnable{
 /** Called when the activity is first created. */

 private ProgressDialog dialog;
 private ImageView imageView;
 private Gallery gallery;
 private Bitmap[] thumbnail;
 private List<String> dirList = new ArrayList<String>();
 private List<String> tmp = new ArrayList<String>();
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

 if(!sdcardReadReady()){
 new AlertDialog.Builder(this)
 .setMessage("SDカードにアクセスできません。")
 .setNeutralButton("OK", this)
 .show();
 return;
 }
 dirList.add(Environment.getExternalStorageDirectory().getPath());
 int i = 0;
 int j = 0;
 while(dirList.size() > i){  
 File subDir = new File(dirList.get(i));  
 String subFileName[] = subDir.list();
 j = 0;
 if(subFileName != null){
 while(subFileName.length > j){  
 File subFile = new File(subDir.getPath() + "/" + subFileName[j]);  
 if(subFile.isDirectory()){
 String _st =subDir.getPath() + "/" + subFileName[j]; 
 dirList.add(_st);
 }else if(subFile.getName().endsWith("jpg") || subFile.getName().endsWith("JPG")){  
 tmp.add(subDir.getPath() + "/" + subFileName[j]);  
 }  
 j++;
 }
 }
 i++;  
 }

 if(tmp.isEmpty()){
 new AlertDialog.Builder(this)
 .setMessage("画像のデータがありません")
 .setNeutralButton("OK", this)
 .show();
 return;
 }

 //tmp.toArray();
 dialog = new ProgressDialog(this);
 dialog.setMessage("読み込みを行います。");
 dialog.show();
 thumbnail = new Bitmap[tmp.size()];
 new Thread(this).start();
 gallery = (Gallery)findViewById(R.id.gallery1);
 gallery.setSpacing(8);
 gallery.setAdapter(new GalleryAdapter());
 gallery.setOnItemClickListener(this);
 imageView = (ImageView)findViewById(R.id.imageView1);
 Bitmap picture = BitmapFactory.decodeFile(tmp.get(0));
 imageView.setImageBitmap(picture);
 }

 public void run(){
 for(int i = 0 ; i < tmp.size(); i++){
 BitmapFactory.Options options = new BitmapFactory.Options();
 options.inJustDecodeBounds = true;
 BitmapFactory.decodeFile(tmp.get(i),options);
 int height = options.outHeight;
 int scale = height /50;
 options.inSampleSize = scale;
 options.inJustDecodeBounds = false;
 thumbnail[i] = BitmapFactory.decodeFile(tmp.get(i),options);
 }
 dialog.dismiss();
 }

 private boolean sdcardReadReady(){
 String state = Environment.getExternalStorageState();
 return (Environment.MEDIA_MOUNTED.equals(state)||Environment.MEDIA_MOUNTED_READ_ONLY.equals(state));
 }

 @Override
 public void onClick(DialogInterface dialog, int which) {
 switch(which){
 case DialogInterface.BUTTON_NEUTRAL:
 dialog.dismiss();
 finish();
 }
 }

 @Override
 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
 // TODO Auto-generated method stub
 if(arg0 == gallery){
 Bitmap picture = BitmapFactory.decodeFile(
 tmp.get(arg2)    
 );
 imageView.setImageBitmap(picture);
 }
 }
 public class GalleryAdapter extends BaseAdapter{

 @Override
 public int getCount() {
 // TODO Auto-generated method stub
 return tmp.size();
 }

 @Override
 public Object getItem(int position) {
 // TODO Auto-generated method stub
 return null;
 }

 @Override
 public long getItemId(int position) {
 // TODO Auto-generated method stub
 return 0;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
 // TODO Auto-generated method stub
 ImageView view;
 if(convertView == null){
 view = new ImageView(SlideGallery.this);
 view.setImageBitmap(thumbnail[position]);
 }else{
 view = (ImageView)convertView;
 }
 return view;
 }
 }
}

以上で簡単にではありますが、SDcardの中のスライドショーが完成しました。

同じカテゴリの記事を紹介します

保存した内容を本体に認識をさせる。画像をスライドショーとして表示する。BaseAdapterでAdapterを作る。画像をスライドショーとして表示する。画像のファイルを読み込む画像をスライドショーとして表示する。画像のファイルにアクセス画像をスライドショーとして表示する。SDカードの認識メモ帳を作成するテキストファイルの操作関数バッファ周りの関数を調べる

カテゴリー:ファイル操作

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする