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

フリーランスを目指す新入社員のブログ

主にアプリ開発に関する記事を書いていきます。

フリーランス用サイトをまとめてみた

フリーランス サイト

いくつかあるフリーランス用サイトをまとめてみました。僕も題名にある通りフリーランスを目指しているので、こういうサイトをうまく活用していきたいですね。まぁ、とりあえず今の会社で5年は働こう...

ITプロパートナーズ


ITプロパートナーズ|「週2回」からプログラミング、デザイン、ディレクションなどのお仕事を紹介しています。

パラフト


未来の「ハタラキカタ」を科学する求人・転職メディア Paraft(パラフト)

アットエージェント


ITフリーランス(個人事業主)の求人・案件サイト - @Agent

エンジニアナビ


フリーランス・フリーエンジニアの求人・案件【エンジニアナビ】

プロシート


好きで活きて得意で稼ごう PROSHEET.JP

Ambitious


Ambitious-スタートアップ企業多数のソーシャルリクルーティングサービス

CrowdWorks


日本最大級のクラウドソーシング「クラウドワークス」

首都圏コンピューター技術者株式会社


フリーランスの案件・求人は首都圏コンピュータ技術者

ランサーズ


クラウドソーシングなら日本最大級の「ランサーズ」

Shufti


在宅ワーク・内職の求人募集、お仕事で稼ぐならシュフティ

MISTUMO


ホームページやWEB制作のお見積り比較発注なら【MITSUMO】

CardViewでタッチフィードバックを得る方法

Android CardView MaterialDesign アプリ開発

少しはまったのでメモとして残す。またまたCardViewの話。CardViewではただ配置しただけではListViewのようにタッチした時にタッチされたよ!って感じの反応をしてくれません。なので、CardViewのxmlに1行追加します。

card_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1">

    <android.support.v7.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="78dp"
        card_view:cardCornerRadius="4dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="5dp"
        android:id="@+id/cardView"
        <!-- 下の1行を追加 -->
        android:foreground="?android:attr/selectableItemBackground"
        >

        <!-- カードに載せる情報 -->
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:id="@+id/cardRelative"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="CardView"
                android:id="@+id/textBox"
                android:textSize="30dp"
                android:layout_centerVertical="true"
                android:layout_marginLeft="17dp"
                android:layout_marginStart="17dp" />

        </RelativeLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>

Androidアプリ開発でCardViewを使ってみた

Android CardView MaterialDesign アプリ開発

CardViewとはAndroid 5.0 Lolipopから使えるようになった新しいViewの一つです。サポートライブラリに入っているので、Android5.0以前の端末でも動かすことができます。

久しぶりの更新です。アプリの開発に焦点がいっててなかなか更新できませんでした。最近、アプリをMaterial Designに対応しようと思いまして、いろいろやってるうちにListViewだとなんかデザイン的にもの足りないものができてしまうので、思い切ってListVIewからCardViewに変更してみました。結構時間かかるかなあと思ってたんですけど、思ったより導入が簡単にできてデザイン的にもよくなったので気に入っています。

導入方法

1.build.gradleに以下を追加します。

dependencies {
        compile "com.android.support:cardview-v7:+"
}

2.xmlファイルを作成します。
メインの画面にはCardViewを動的に追加していきます。
activity_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="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView"
        android:fillViewport="false"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:id="@+id/cardLinear">
        </LinearLayout>
    </ScrollView>

</LinearLayout>

test_card.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1">

    <android.support.v7.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="78dp"
        card_view:cardCornerRadius="4dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="5dp"
        android:id="@+id/cardView">

        <!-- カードに載せる情報 -->

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:id="@+id/cardRelative"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="CardView"
                android:id="@+id/textBox"
                android:textSize="30dp"
                android:layout_centerVertical="true"
                android:layout_marginLeft="17dp"
                android:layout_marginStart="17dp" />

        </RelativeLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>

f:id:briete:20150210203840p:plain
こんな感じのレイアウトができます。

3.プログラムから制御

protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 LinearLayout cardLinear = (LinearLayout)this.findViewById(R.id.cardLinear);
 cardLinear.removeAllViews();

 for(int i = 0; i< 5; i++) {
   LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        LinearLayout linearLayout = (LinearLayout) inflater.inflate(R.layout.test_card, null);
        CardView cardView = (CardView) linearLayout.findViewById(R.id.cardView);
        TextView textBox = (TextView) linearLayout.findViewById(R.id.textBox);
        textBox.setText("CardView" + i);
        cardView.setTag(i);
        cardView.setOnClickListener(new View.OnClickListener() {
        @Override
         public void onClick(View v) {
               Toast.makeText(MainActivity.this, String.valueOf(v.getTag()) + "番目のCardViewがクリックされました", Toast.LENGTH_SHORT).show();
            }
        });
        cardLinear.addView(linearLayout,i);
    }
}

こんな感じになりました。
f:id:briete:20150210223618p:plain

Androidアプリを開発する上で、最低限読んでおきたいQiita記事

Android Qiita アプリ開発


要約:iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い - Qiita


Web な人もアプリな人も、これから新しく Android アプリを作るなら抑えておきたいポイント3選 - Qiita


AndroidStudioの標準デザインパターンで分かるFragment入門 - Qiita


やさしい設計 〜 Android 編 - Qiita


mvc - 隊長、Androidアプリのソースがぐちゃぐちゃであります!! - Qiita


Androidエンジニアが開発する上で知っておきたいこと - Qiita


[翻訳] android best practice - Qiita


絶対必要になるAndroidの生きたライブラリ一覧(2014) - Qiita

情報処理技術者試験の高度種を1個でもいいからとりたい

情報処理技術者試験 情報セキュリティスペシャリスト 日記 気になった記事

今日こんな記事がはてブにあがってたのでみたんですけど、素直に尊敬します。高度種の難しさは実際に受けた人なら嫌ってほどわかるはず。しかも、ITストラテジストって高度種の中でもトップクラスに難しい試験のはずなのに,それを業務経験なしで受かるとか僕には考えられない。

業務経験無しでITストラテジスト試験に合格する方法 - zekipedia

これもいつかは取りたいけど、まずは今勉強してる情報セキュリティスペシャリストを取らないとですね。今年受けたんですけど酷い有様でした。その結果がこれです。
f:id:briete:20150121222128j:plain

正直午後1受かってたのはびっくりした。午後2は選んだ問題がわからなすぎて途中退室しました。後日、選んでない方を解いてみたら自己採点で7割あってて、いかにIPAの国家試験が選ぶ問題によって変わるのかがわかりました。僕的に、IPA情報処理技術者試験を受かる秘訣は、いかに問題を選び間違えないかという事だと思う。問題によって難易度が違いすぎる。

Android Studioでライブラリをいろいろ使ってみた。その2

Android Android Studio ライブラリ icepick アプリ開発

icepick

icepickは変数の保存や復元を簡単に行ってくれるライブラリです。AndroidはすぐにActvityとかが破棄されて変数やインスタンスが初期化されてしまうので、そういうのを自動的に保存・復元してくれます。結構こういう保存と復元の処理をしておかないとのちのち変なバグに陥る場合があります(僕のように)


frankiesardo/icepick · GitHub

実際に使ってみた

build.gradleの以下の追加します。

compile 'com.github.frankiesardo:icepick:2.3.6'
provided 'com.github.frankiesardo:icepick-processor:2.3.6'

アプリに導入するのは非常に簡単です。以下のように導入します。

@Icicle String hoge; 

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Icepick.restoreInstanceState(this, savedInstanceState);
  }

  @Override public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Icepick.saveInstanceState(this, outState);
  }

これでhogeという変数は、Activityが破棄されても、自動的に保存と復元を行い値を維持することができます。

Android開発で最近知った事

Android アプリ開発

Android開発もまだまだわかんないことだらけで、仕事の暇なときにAndroidの記事を漁ってちょこちょこ勉強してるんですけど、そこで最近Android開発で知ったことを書いていきます。

Applicationクラス

このクラスを使えばアプリ全体で変数などのデータを共有して使うことができます。僕はいままで、アプリで変数を共有するとしたらIntentのputExtraだったりを使ったりしていてとてもめんどくさかったので、助かりました。

参考記事

Applicationクラスを継承して、データの共有をする。 | Tech Booster

onSaveInstanceState()とonRestoreInstanceState()

これは、Activityの状態を保存・復原するときに使うメソッド。 onSaveInstanceState()でActivityの状態を保存して、onRestoreInstanceState()で復元する。Androidは画面の回転をしただけでもActivityが破棄されてしまうので、そういうときに破棄されるActivityを破棄される前に保存して復元することができる。これとライブラリのicepickを使ったらものすごく便利で捗る。icepickは変数の保存と復元を行ってくれるライブラリです。

参考記事
Y.A.M の 雑記帳: Android Bundle で状態を保存

frankiesardo/icepick · GitHub

LayoutInflater

簡単に言えば、動的にxmlのレイアウトのを変更できるよっていうものです。くそ便利。開発でもちょくちょく出てきてはいたんですけど、ただコピペして使ってたので、意味もわからず使ってました。でも最近勉強して、理解してきてようやくこれの便利さがわかりました。

参考記事

LayoutInflater - Androyer in Japan

やっぱり勉強大事

プログラマの知識って知ってると知ってないとじゃ開発の効率やペースがえらい変わってくる。こういう基礎的なことが僕はおろそかなので、これからも勉強していきたいと思います。会社の暇な時間に←