読者です 読者をやめる 読者になる 読者になる

本のビューワ その2

プログラム

スクリーンサイズに合わせて拡大縮小と次のページに行くのがなんとなく出来た
ついでに縦長の画像は横回転して表示してみた

ScaleGestureDetectorとかいうのでピンチイン・アウトで拡大縮小やってみたけどちょっと違和感のある動き
つか、エミュレータでマルチタッチってどうやるんだ??
とりあえず実機でやってみたらなんとなく動いている

ちょっと面倒なのが買ったzipにファイル名順にできてないのがあるっぽい
それとWinXP以降のファイル名の数値順で並ぶせいか前ゼロつけてないのとか
しょうがないからzipのファイル名をWindows風にソートすることにしたらソースがくっそ長く・・・そもそも合ってるのか?

List<String> xs = new ArrayList<String>();
ZipFile zip = getArchive();
for(Enumeration<? extends ZipEntry> e = zip.entries(); e.hasMoreElements();)
{
	ZipEntry entry = e.nextElement();
	if(!entry.isDirectory())
	{
		xs.add(entry.getName());
	}
}

// WindowsXP以降のファイル名ソーと順を模倣
Collections.sort(xs, new Comparator<String>()
	{
		@Override
		public int compare(String left, String right)
		{
			int left_index = 0;
			int right_index = 0;
			
			while(left_index < left.length() && right_index < right.length())
			{
				char left_char = left.charAt(left_index);
				char right_char = right.charAt(right_index);
				
				if(left_char == right_char)
				{
					left_index++;
					right_index++;
				}
				else if(
					left_char >= '0' && left_char <= '9' &&
					right_char >= '0' && right_char <= '9')
				{
					int left_num = left_char - '0';
					int right_num = right_char - '0';
					
					left_index++;
					right_index++;
					while(true)
					{
						left_char = left.charAt(left_index);
						
						if(left_char >= '0' && left_char <= '9')
						{
							left_num = left_num * 10 + left_char - '0';
							left_index++;
						}
						else
						{
							break;
						}
					}
					while(true)
					{
						right_char = right.charAt(right_index);
						
						if(right_char >= '0' && right_char <= '9')
						{
							right_num = right_num * 10 + right_char - '0';
							right_index++;
						}
						else
						{
							break;
						}
					}
					if(left_num != right_num) {return(left_num - right_num);}
				}
				else
				{
					return(left_char - right_char);
				}
			}
			
			if(left_index < left.length()) {return(-1);}
			if(right_index < right.length()) {return(1);}
			return(0);
		}
	});

全くテストはしてないけど、なんとなくぽくなった