アンドロイドライブラリ本読んでのメモ
自メモ)
最近技術本の発売ラッシュだな。。嬉しいけど懐が寂しいorz

50 Android Hacks 開発現場ですぐに役立つヒントとコード
- 作者: Carlos Sessa,江川崇,荒木佑一,東真美菜
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2013/11/01
- メディア: 大型本
- この商品を含むブログ (3件) を見る
今調べてるのは3系だったりするので微妙に使えなくて悩ましい。
の目次見てると微妙に使えなくて厳し目。
まだ即使えそうな感じのものだと後者の2冊のほうがオススメかな。。
知識を増やす的な話では勉強にはなるんだけど。。。
![Androidライブラリ実践活用[厳選111] (Software Design plus) Androidライブラリ実践活用[厳選111] (Software Design plus)](http://ecx.images-amazon.com/images/I/517Rv9mShHL._SL160_.jpg)
Androidライブラリ実践活用[厳選111] (Software Design plus)
- 作者: 菊田剛
- 出版社/メーカー: 技術評論社
- 発売日: 2013/12/05
- メディア: 大型本
- この商品を含むブログ (3件) を見る
IS01で動かす場合以下で落ちるので下記をコメント
サンプルではどうも使ってないみたい*1
-
- shared.ui.actionscontentview.ContentLayout
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public ContentLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);// we need to be sure we have horizontal layout to add shadow to left border
setOrientation(LinearLayout.HORIZONTAL);
}
カスタム性は少ないみたいだ。。
リソースにはattr.xml等だけみたいなので jar同梱形式でも問題ないとは思われる
ただ左側固定で 右側に出す等の設定はいじれないので微妙な面は有
操作関数は
- showContent();//バー表示
- showActions(); //広いバー表示
- hideContent(秒);//非表示
あたりか・・。
- EventBus
EventBus is yoku wakaranai
@izumin5210 me too!
2014-01-23 23:04:49 via hamoooooon to @izumin5210
@kimukou2628 observerより手軽っぽいけど参考になるページが見つからない…
2014-01-23 23:06:11 via web to @kimukou2628
ちょっとググってメモ
- 17.Observer パターン | TECHSCORE(テックスコア)
- Google's Guava Libraries で EventBus - sugarlife's blog
- guava librariesに追加されたEventBusについて - Kengo's blog
- Guava の EventBus で多相の値を扱うために試行錯誤した話 - Qiita
- EventBus - torutkの日記

- 作者: 八木俊広
- 出版社/メーカー: 秀和システム
- 発売日: 2013/12/05
- メディア: 単行本
- この商品を含むブログ (3件) を見る
@sys1yagi さんは個人でもOSSのライブラリを積極的にリリースされている方で
よくブログも拝見させて頂いてます(いつもお世話になっております)
- PhotoView
機能自体はすごく使いやすい感じでした。
- スワイプズーム
- ダブルタップズーム*2
ただFragmentで使うと createViewだけじゃなくて
setImageBitmap等再設定したタイミングで再度設定しないと駄目とかが有るかも
PhotoViewAttacher attacher = new PhotoViewAttacher(iv);
- ダブルタップ処理*3
attacher.onDoubleTap(event);
デフォルトだと 1.0f/2.0f/3.0f と循環する感じの挙動に
- 元のサイズに戻す
attacher.setScale(1.0f, 0, 0, true);
ここらへんはちょくにコード読むしか無いかな(汗
PS)
つい最近、最新版落としたらIS01でverificationErrorが出てしまったのでpatch(正確にはソース分離)あてる
- Compat.java
/******************************************************************************* * Copyright 2011, 2012 Chris Banes. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package uk.co.senab.photoview; import android.annotation.TargetApi; import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.view.MotionEvent; import android.view.View; public class Compat { private static final int SIXTY_FPS_INTERVAL = 1000 / 60; public static void postOnAnimation(View view, Runnable runnable) { if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { CompatEx.postOnAnimationJellyBean(view, runnable); } else { view.postDelayed(runnable, SIXTY_FPS_INTERVAL); } } public static int getPointerIndex(int action) { if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) return CompatEx.getPointerIndexHoneyComb(action); else return getPointerIndexEclair(action); } @SuppressWarnings("deprecation") @TargetApi(Build.VERSION_CODES.ECLAIR) private static int getPointerIndexEclair(int action) { return (action & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; } }
- CompatEx.java
package uk.co.senab.photoview; import android.annotation.TargetApi; import android.os.Build; import android.view.MotionEvent; import android.view.View; public class CompatEx { @TargetApi(16) static void postOnAnimationJellyBean(View view, Runnable runnable) { view.postOnAnimation(runnable); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) static int getPointerIndexHoneyComb(int action) { return (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; } }
- universal-image-loader
このライブラリは結構前から知っていたのですが本読んだタイミングでチャレンジしてみようかと。
某アプリの画像ギャラリー部分 Universal ImageLoader for Android に変更してみたけど、target4 だと Library内部で verificationErrorでるからそこは無理。2系でもAsyncTaskのスレッド使ってる処で参照エラー
というかサンプル記述のままだと2系でもエラー。
下記みたいなクラスを作ってラッパにしたけど
- ImageLoaderUtil.java
public class ImageLoaderUtil { public static DisplayImageOptions options; public static void init(Context context) { options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_stub) .showImageForEmptyUri(R.drawable.ic_empty) .showImageOnFail(R.drawable.ic_error) .cacheInMemory(true) .cacheOnDisc(true) .considerExifParams(true) //.bitmapConfig(Bitmap.Config.ARGB_4444)//.RGB_565) .build(); // see http://qiita.com/chuross/items/e3ca79065d9b67716ace File cacheDir = StorageUtils.getCacheDirectory(context); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( context) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) .taskExecutor(THREAD_POOL_EXECUTOR) .taskExecutorForCachedImages(THREAD_POOL_EXECUTOR) .threadPoolSize(3) // default .threadPriority(Thread.NORM_PRIORITY - 1) // default .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // default .memoryCacheSize(2 * 1024 * 1024) .discCache(new UnlimitedDiscCache(cacheDir)) // default .discCacheSize(50 * 1024 * 1024).discCacheFileCount(100) .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default .imageDownloader(new BaseImageDownloader(context)) // default //.defaultDisplayImageOptions(options)//DisplayImageOptions.createSimple()) // default .writeDebugLogs().build(); ImageLoader.getInstance().init(config); } public static void displayImage(String uri, final ImageView imageAware) { displayImage(uri, imageAware,null,null); } public static void displayImage(String uri, final ImageView imageAware,SimpleImageLoadingListener listner) { displayImage(uri, imageAware,listner,null); } public static void displayImage(String uri, final ImageView imageAware, SimpleImageLoadingListener listner, ImageLoadingProgressListener listner_prg) { ImageLoader loader = ImageLoader.getInstance(); loader.displayImage(uri, imageAware,options,listner,listner_prg); } // ==================== // copy from AsyncTask private static final ThreadFactory sThreadFactory = new ThreadFactory() { private final AtomicInteger mCount = new AtomicInteger(1); public Thread newThread(Runnable r) { return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); } }; private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>( 128); /** * An {@link Executor} that can be used to execute tasks in parallel. */ private static final int CPU_COUNT = Runtime.getRuntime() .availableProcessors(); private static final int CORE_POOL_SIZE = CPU_COUNT + 1; private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; private static final int KEEP_ALIVE = 1; public static final Executor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor( CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory); // ==================== }
universal-Image-Loader でNW経由の画像ギャラリー差替て上にみせたんだけど IOSみたいにパッパッと表示されないから =>ローディング中画面出せや(仮絵自分で用意しろ) あと上下スクロールでページ切換するのはUX的に常識だろ ってそうなのかな(汗
universal-Image-Loader のsample/ImageGridActivity みてる。うーん。やっぱりProgressBar表示してるのか。。試しにRGB565にしてみるとたしかに早いけど 新N7とか大きめの端末だと画像のアラが目立ってしまった(汗
当初の認識だと
loadImage にしか完了時のbitmapが取得できないいかな?とか思って読込後の表示リフレッシュを悩んでたんですが*5
displayImageでも
SimpleImageLoadingListener と ImageLoadingProgressListener の設定が可能
という事がわかって大分いい感じにできたかなと。
まだ課題タスクに残ってる
- 上下スクロールでページ切替読込
はまだ出来てないけど。。
あたりを絡めて試行錯誤してみる予定
追記メモ>