【Android】 ScrollView ViewPager 

そろそろ Android は、カテゴリーを独立させたほうが良いかも知れない。

ということで、ただいまドハマリ真っ最中なのでございます。
まぁ、下図のようなことをやりたいわけですが・・・。


やりたいこと

プログラムなんて初心者も良いところのワタクシ、もちろん、XML を使ってレイアウトを作っていますことよ。

1.素直に

<ScrollView>
 <LinearLayout>
  <android.support.v4.view.ViewPager>

とかやって、MainActivity で、ViewPager と、PagerAdapter を使って、Page0、Page1、Page2 を切り替えてみる。

うーん、<ScrollView> があると上手く行かない。

stackoverflow 先生に「上手く行かないよー!」「こうすると直るよー」があったんだけど、そもそもワタクシの症状ではpage0が表示されないので、投稿の内容とは症状が違うもよう。

stackoverflow 先生の症状は、ScrollView が、ViewPager のタッチ・イベントを横取りするので、スワイプが上手く動作しないというもののようです。
なので、横取りヤメテーとパッチ(?)を当てて回避しているらしい。

一応、横取りヤメテパッチも当ててみたけど、症状改善せず。

レイアウト・エディタでこんな表示が出てたので、

Exception raised during rendering: android/support/v4/view/ViewPager : Unsupported major.minor version 51.0

JAVAコンパイラーを入れ替えてみたりしたんだけど・・・。
Mac の1.6 (Apple版)から 1.7(Oracle版) への切り替え(インストール&設定)があんなに大変だとは思わなかったよ。

<ScrollView> がなければ上手く機能していただけに、後ろ髪を引かれつつも別のやり方を考えてみる。


2.<HorizontalScrollView> を使ってみる。

<ScrollView>
 <LinearLayout>
  <HorizontalScrollView>
   <LinearLayout>

    <LinearLayout>
     page0
    </LinearLayout>

    <LinearLayout>
     page1
    </LinearLayout>

    <LinearLayout>
     page2
    </LinearLayout>

   </LinearLayout>

  </HorizontalScrollView>
 </LinearLayout>
</ScrollView>

こちらは問題なく縦横スクロールできる模様。

で、HorizontalScrollView の onTouch イベントで、スクロール幅を見て、一定以上だったら、scrollTo とかで1ページ分スクロールさせてスワイプしてるように見せかける。

と思ったんだけど、<HorizontalScrollView> の下の <LinearLayout> の layout_width を端末の画面幅×ページ数で設定しなきゃならないんだった。

で、こいつは XML では無理そげなので、コードを書くことになりそうです。

layout_width="device_width * 3"

とかで指定できないの? できませんか、そうですか。


ボタンを作って、ボタンが押されたら inflater を使ってページを切り替えちゃおうかなぁ。
それはそれで、切り替えるページ上のウィジェットの状態を保持するのがメドい気もする。

・・・できるだけコードは書きたくない、この腐った性根がいかんのかも知れん。



スポンサーサイト

コメント

非公開コメント