LoginSignup
7
2

More than 5 years have passed since last update.

クリックしたら取り消し線をつけて色が薄くなるListView

Posted at

Android の ListView に関する投稿です。

TextView が項目となっている ListView を使って、「クリックしたら項目が薄くなって、取り消し線が引かれる」という機能を実装してみます。

目標

実装

3つ変数を宣言します。

MainActivity.java
    private ListView listView;
    private ArrayAdapter adapter;
    private List<String> items;

初期化します。
今回は凝ったデザインにはしないので、ArrayAdapter には simple_expandable_list_item_1 を渡します。(楽)

MainActivity.java
    listView = (ListView) findViewById(R.id.main_list);
    items = new ArrayList<>();
    adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, items);

大切な部分

ListView の子 View は今回は TextView になっています。
だから、View view の部分で渡されるインスタンスは TextView 型です。
これを利用していきます。

MainActivity.java
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      TextView textView = (TextView) view;

      // 色を変える
      textView.setTextColor(Color.LTGRAY);

      // 取り消し線を引く
      TextPaint paint =  textView.getPaint();
      paint.setFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
      paint.setAntiAlias(true);
    }
});

全体

MainActivity.java はこんな感じになります。

MainActivity.java
public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayAdapter adapter;
    private List<String> items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.main_list);
        items = new ArrayList<>();
        adapter = new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1, items);

        listView.setAdapter(adapter);
        addDummyItems(items);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView textView = (TextView) view;
                textView.setTextColor(Color.LTGRAY);
                TextPaint paint =  textView.getPaint();
                paint.setFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                paint.setAntiAlias(true);
            }
        });
    }

    private void addDummyItems(List<String> items) {
        int size = 10;
        for (int i = 0; i < size; i++) {
            items.add("テキスト" + i);
        }
    }
}

TextPaint強い

こんなクラスがあることを初めて知りました。
簡単な ToDo アプリとかに使えそうです。

参考

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2