サムネイルクラスでレイアウト情報は設定しているので、メインではクラスのメソッドにindex と bitmap データを渡すだけ。サムネイル数は、getSize()で分かるのでその数だけデータを渡せばよい。bitmap をnull にすると非表示になる。bitmapデータは縮小したものを渡す。原画サイズを渡してもサムネイル表示されるがメモリの無駄だから。
MainActivity.java
private MyDirectory mFolderItemList = null;
private RelativeLayout mR_Layout = null;
private MyThumbnailImages mThumbnailImages = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File dir = new File( getFilesDir(),"image1" ); // assetsフォルダーからこのフォルダに移動したので。
mFolderItemList = new MyDirectory( dir );
mR_Layout = (RelativeLayout)findViewById( R.id.thumbnail_image );
mThumbnailImages = new MyThumbnailImages( this, mR_Layout );
initThumbnail ();
}
private void initThumbnail() {
int n = mThumbnailImages.getSize();
int tw = mThumbnailImages.getThumbnailWidth();
int th = mThumbnailImages.getThumbnailHeight();
File f;
String fName;
for ( int i=0; i < n; i++ ) {
fName = mFolderItemList.getFileName( i );
if ( fName == null ) continue;
f = new File( mFolderItemList.getTargetDir().getAbsolutePath() + "/" + fName );
if ( !f.exists() || !f.isFile() ) continue;
try {
InputStream istream = new FileInputStream( f );
Bitmap bitmap = BitmapFactory.decodeStream(istream);
float mag = calcThumbnailMag( bitmap.getWidth(), bitmap.getHeight(), tw, th );
int width = (int) ((float) bitmap.getWidth() * mag );
int height = (int) ((float) bitmap.getHeight() * mag );
Bitmap scaleBitmap = Bitmap.createScaledBitmap( bitmap, width, height, true);
mThumbnailImages.setThumbnailImage( i, scaleBitmap );
mThumbnailImages.setThumbnailText( i, fName );
bitmap.recycle();
istream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private float calcThumbnailMag( int bitmapW, int bitmapH, int reqW, int reqH ) {
float magW = (float) reqW / (float) bitmapW;
float magH = (float) reqH / (float) bitmapH;
return Math.max( magW, magH );
}
dimen を指定するように変更。
activity_main.xml
< RelativeLayout
android:id="@+id/thumbnail_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_start"
android:layout_marginTop="@dimen/margin_top"
android:layout_marginEnd="@dimen/margin_end"
android:layout_marginBottom="@dimen/margin_bottom"
tools:ignore="MissingConstraints" >
数値はここで設定する。
res/values/dimens.xml
< resources>
10dp
10dp
10dp
20dp