Android ImageViewをシルエット化、色々

android シルエット 透過具合調整

黒で塗りつぶし


ImageView.setColorFilter(Color.BLACK,PorterDuff.Mode.SRC_ATOP);

こんな感じに普通のシルエットができます。

android シルエット
android シルエット

透過具合を指定して、塗りつぶし


ImageView.setColorFilter(R.color.my_color_silhouette,PorterDuff.Mode.SRC_ATOP);

R.color.my_color_silhouetteのxmlファイルも一応

colors.xml


<color name="my_color_silhouette">#ee000000</color>

今度はこんな感じ

android シルエットうっすら黒くなるだけ
android シルエットうっすら黒くなるだけ

↑ これだと思うように透過されません。alphaをffにしても透過された状態になる。。

下記のようにparseColorで透過具合を指定すると。


ImageView.setColorFilter(Color.parseColor("#ee000000"),PorterDuff.Mode.SRC_ATOP);
android シルエット 透過具合調整
android シルエット 透過具合調整

無事イメージどおりの透過具合になりました!

AndroidのFragmentタブ画像をxmlのImageViewで指定

android fragment タブ カスタマイズ リサイズ
android fragment タブ カスタマイズ リサイズ
android fragment タブ カスタマイズ リサイズ

androidのfragmentでタブ画像をカスタマイズした時のメモ。

MainActivity.java


TabLayout mTabLayout = (TabLayout) findViewById(R.id.tab_layout); mTabLayout.setupWithViewPager(viewPager); mTabLayout.getTabAt(0).setText("").setCustomView(android.R.layout.tab_image_view_1); mTabLayout.getTabAt(1).setText("").setCustomView(android.R.layout.tab_image_view_2);

setCustomViewでレイアウトのxmlファイルを指定するのがポイント。

レイアウトは下記

res/layout/tab_image_view.xml


<ImageView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="80dp" android:layout_height="80dp" android:scaleType="centerInside" android:src="@drawable/hoge_image" />

hoge_imageが表示した画像ファイル

Android UIスレッド操作まとめも

Androidアプリに埋め込む配布用のSDKを作っていて、メインアプリになるべく影響ない作りにしたいと思って開発しており、ネックになった部分を整理したいのでまとめも!
(javaはじめたばっかりなので、なんでもご指摘くださいm(_ _;)m)

上記の通り、メインアプリに影響をなるべくなくすために何をしたらいいか考えたみた結果、
SDKの処理は非同期でやることにした。 (jarファイルで配布する予定)
今回はUIの操作も必要なので、方法として2点あるようだ・・・(かな?

HandlerThreadを扱う方法とAsyncTaskを使う方法があるようで。
AndroidではUIの処理はシングルスレッドで、別タスクから処理は、そのシングルスレッドにジョブ登録するように利用する必要があるとの事。
AsyncTaskを使う場合は、メインのシングルスレッドにジョブを投げるよう意識する必要はないみたいですが。

 

■HandlerでUIスレッド(シングルスレッド)にジョブをpostするパターン

下記記事を参考にさせていただきました!ありがとうございます!
http://pentan.info/android/app/handler.html
http://www.adamrocker.com/blog/261/what-is-the-handler-in-android.html

UIスレッド操作はメインのスレッド以外から直接操作はできないので、
Handlerを使って、メインスレッドにタスクとしてpostしてあげる。
というのが必要との事。

Handler h= new Handler();

h.post(new Runnable() {
  @Override
  public void run() {
    textView.setText("helloworld!"); //UI操作OK!
  }
});

また、操作方法にはpostDelayedなどを使って一定時間ごとの処理も可能。

 

■AsyncTaskを使うパターン

参考にさせていただいたサイト!ありがとうございます!
http://android.keicode.com/basics/async-asynctask.php
http://labs.techfirm.co.jp/android/cho/1079
http://wikiwiki.jp/android/?AsyncTask%A4%C7%A5%D0%A5%C3%A5%AF%A5%B0%A5%E9%A5%A6%A5%F3%A5%C9%BD%E8%CD%FD%A4%F2%B9%D4%A4%A6

 

new MyAsyncAppTask().execute(api_key);
class MyAsyncTask extends AsyncTask<String, Integer, String[]>{ //
 @Override
 protected void onPreExecute() { 
 //準備処理を書く
 }
@Override
 protected void onProgressUpdate(Integer... values) {
 //進捗状況
 }
@Override
 protected void onCancelled() {
 //キャンセル
 }
@Override
protected String[] doInBackground(String... api_key) {
 //処理を書く※注意ここではUI処理はしない
 return strArr;
 }
@Override
 protected void onPostExecute(String[] str) {
 //処理完了時実行、doInBackgroundの戻り値など使って処理もできる。(UI処理も)
 }
}

 extends AsyncTask<型, 型, 型>
1つ目の型 = excute()の引数の型
2つ目の型 =  onProgressUpdateの引数の型
3つ目の型 = doInBackgroundの引数の型

・onPostExecuteの引数には「…」はいれない。

せっかく調べたので、メモ。