|
詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したHarmonyOSテクノロジーコミュニティ。 https://harmonyos..com 序文Android プラットフォームに基づくページ スクロール コンポーネントである ViewPagerIndicator (https://github.com/LuckyJayce/ViewPagerIndicator) が HarmonyOS に移行され、リファクタリングされました。 背景ViewPagerIndicator_ohosは、ニュースやショッピング情報などの複雑な情報を表示するのに適した情報表示コンポーネントです。従来のページレイアウトでコンテンツを表示する場合、同じ種類の情報が同一ページに表示されます。ViewPagerIndicator_ohosコンポーネントを使用すると、同じ種類の情報を複数のページに表示でき、ユーザーは画面をスワイプすることでページを切り替えることができます。2つの効果の比較を図1に示します。 図 1. ViewPagerIndicator_ohos コンポーネントと従来のページでのコンテンツの表示の違い。 コンポーネント効果表示コンポーネントアプリケーションのメインインターフェースには3つのボタンがあります。「ホーム」ボタンと「マイ」ボタンはコンポーネントの部分的な効果を表示し、「コミュニティ」ボタンはコンポーネント全体の効果を表示します。ここでは部分的な効果については詳しく説明しませんが、全体的な効果については直接説明します。他の2つのボタンの機能にご興味のある方は、ソースコードをダウンロードして詳細をご確認ください。 ユーザーがアプリケーションの下部ナビゲーションバーにある「コミュニティ」タブをクリックすると、コンポーネントは複数のページに分散された「コミュニティ」セクションのコンテンツを表示します。アプリケーションの上部にはページインジケーターがあり、ユーザーは2つの方法でページを切り替えることができます。1) 画面をスワイプするとページが切り替わり、ページインジケーターは常に現在表示されているページを指します。2) ページインジケーターをクリックすると、図2に示すように、選択したインジケーターが示すページに切り替わります。 図 2. インジケーターが現在のページを表示しているときにページをスワイプする機能。 サンプル分析Sampleセクションは主に表示レイアウトの構築に使用されます。MainAbilitySliceファイルはアプリケーションのメインインターフェースレイアウトの構築を担当し、CommunityFractionファイルはページとページインジケータのレイアウトの構築を担当します。CommunityFractionによって生成されたUIは、Fractionの形式でメインインターフェースレイアウトに埋め込まれます。 1. MainAbilitySliceファイルMainAbilitySliceファイルは、コンポーネントアプリケーションのメインインターフェースレイアウトを構築する役割を担います。レイアウト構築の具体的な手順は以下のとおりです。 ステップ 1: コンポーネント アプリケーションのレイアウト ファイルを設定します。 コンポーネントのメインUIレイアウトは`ability_main.xml`で定義されています。UIには、「ホーム」、「マイ」、「コミュニティ」ボタンを表す3つのボタンと、コンテンツ表示ページを表すStackLayoutが含まれています。`ability_main.xml`ファイルは、`setUIContent()`メソッドを使用して、コンポーネントアプリケーションのメインUIレイアウトとして設定されています。
ステップ2: ボタンの配置MainAbilitySlice ファイルの OnStart() メソッドでは、手順 1 の「Community」ボタンが findComponentById() メソッドを使用して検索されます。
ステップ3: ボタンリスナー「コミュニティ」ボタンのクリックイベントを設定します。ボタンがクリックされたら、コミュニティコンテンツを表す CommunityFraction を手順1の StackLayout に埋め込み、「コミュニティ」ボタンをクリックした後の表示効果を実現します。
2. CommunityFractionファイルCommunityFraction クラスは Fraction クラスを継承し、MainAbility に全体の表示レイアウトの一部として埋め込まれています。単独で使用することはできません。CommunityFraction ファイルは、ページとページインジケーターのレイアウトを構築する役割を担っています。ここでは、ViewPager オブジェクトを使用してページ切り替えを管理し、TabList を使用してページインジケーターを作成しています。ViewPager 内のページは、コンポーネント効果のデモで説明されている効果を実現するために、TabList 内のタブに順番にバインドされます。具体的な実装手順は以下のとおりです。 ステップ1: CommunityFractionファイルのレイアウトを作成するfraction_community.xml は CommunityFraction のレイアウトファイルで、ViewPager と TabList が含まれています。LayoutScatter クラスオブジェクトの parse() メソッドを使用して、fraction_community.xml を後で使用するための Component オブジェクトに変換します。
ステップ2: 関連するクラスをインポートし、オブジェクトを宣言するCommunityFraction ファイルに ViewPager クラスと PagerAdapter クラスをインポートします。ViewPager クラスは PageSlider クラスを継承し、画面のスワイプに応じてページを切り替えます。PagerAdapter クラスは PageSliderProvider クラスを継承し、ページアイテムの管理機能を提供します。 ページ インジケーターを作成するための TabList クラスや、TabList のリスナーとスタイルを設定するための FixedIndicatorView クラスなど、ohos.agp.components の下にあるすべてのクラスをインポートします。
ステップ3: 異なるページを作成するCommunityFraction クラスは Fraction クラスを継承しているため、onComponentAttached() メソッドをオーバーライドする必要があります。このメソッドは、CommunityFraction がメインインターフェースレイアウトに追加されたときに呼び出されます。onComponentAttached() メソッドでは、XML を使用して「Page 1」、「Page 2」、「Page 3」という 3 つの異なる表示ページが作成されます。
同時に、要素タイプが Component である ArrayList を作成し、上記で作成した 3 つのページを順番に ArrayList に追加します。
ステップ4: ページインジケーターを作成するまず、文字列配列を定義します。配列の長さによってページインジケーターの数が決まり、配列の要素によってページインジケーターの内容が決まります。 次に、TabList オブジェクトを作成し、findComponentById() メソッドを使用して fraction_community.xml 内の TabList を見つけます。 最後に、 for ループを使用して、配列の内容を TabList 内の各タブのテキストに設定します。
ステップ5: ViewPagerがページを読み込むまず、ViewPager オブジェクトをインスタンス化し、fraction_community.xml で ViewPager を見つけます。次に、PagerAdapter オブジェクトをインスタンス化して、ページ管理アダプタを作成します。次に、setPages() メソッドを使用して、手順 3 で取得した 3 つのページを含む ArrayList をアダプタに渡します。最後に、アダプタを ViewPager オブジェクトにバインドして、画面をスワイプしたときに複数のページが切り替わる効果を実現します。
ステップ6: ページ遷移に合わせて変化するTabListを実装するViewPager にページスワイプリスナーを追加します。ページが変更されると、対応する操作が実行され、TabList がページに合わせて変化する効果が得られます。onPageChosen() メソッドは、ページが選択されたときに実行する操作を設定するために使用します。このメソッドをオーバーライドする場合は、現在選択されている(表示されている)ページの番号 i を渡し、tabList 内の対応する番号のタブを選択状態に設定する必要があります。
ステップ 7: TabList をバインドし、固定サイズに従って均等に配置します。`CommunityTabListener` クラスの `setViewPager()` メソッドは `ViewPager` を `TabList` にバインドできます。`FixedIndicatorView` クラスの `setFixedIndicator()` メソッドは `TabList` 内の各タブのサイズを固定し、均等間隔で均一な配置の効果を実現します。
ライブラリ分析ViewPagerIndicator_ohosコンポーネントの主な機能は、ViewPagerページ切り替えとTabListページインジケータ切り替えです。ライブラリは、図3に示すように、これらの2つの機能に応じて、インジケータファイルとviewpagerファイルの2つのファイルに分かれています。 `indicator` フォルダには、`CommunityTabListener`、`FixedIndicatorView`、`TabListener`(「My」セクションで参照されているため、ここでは詳しく説明しません)が含まれています。`viewpager` フォルダには、`PagerAdapter` と `ViewPager` が含まれています。以下のセクションでは、これらのファイルについて詳しく説明します。 図3 図書館セクションのエンジニアリング構造 1. ページインジケータ機能の実装(1)CommunityTabListenerの実装 ページインジケーターの各タブにはリスナーがあり、異なるタブをクリックすると異なるページに切り替わります。具体的な効果については図2をご覧ください。 上記の機能は、`TabList` クラスの `TabSelectedListener` インターフェースを実装する `CommunityTabListener` クラスによって実装されています。このインターフェースは主に `onSelected()`、`onUnSelected()`、`onReselected()` の3つの関数をオーバーライドします。これらの関数は、タブが選択されたとき、選択解除されたとき、そして放されたときの動作をそれぞれ設定します。ここでは、タブが選択されると、そのタブで指定されたページに切り替わるという設定になっています。
(2)FixedIndicatorView機能の実装 FixedIndicatorView クラスは、TabList リスナーイベントと UI スタイルの設定に使用されます。setTabListListener() メソッドはインジケーターリスナーの設定に使用され、setFixedIndicator() メソッドは TabList 内の各タブのサイズと位置を固定し、すべてのタブが同じサイズで均等に配置されるようにします。
2. ページ管理機能の実装(1) PagerAdapter関数の実装 ページ管理アダプターは PagerAdapter クラスによって実装されており、主に前述の ViewPager クラスオブジェクトへのバインドに使用されます。これにより、画面をスワイプすることで複数のページを切り替えたり、ページアイテムを管理したりできるようになります。 setPages() メソッドは、すでに作成されたページをアダプターに渡します。 `createPageInContainer()` メソッドは、特定の場所にページを追加するために使用されます。ViewPager が最初に読み込まれると、デフォルトで最初のページが表示され、`createPageInContainer()` が呼び出されてページが読み込まれます。最初のページが表示された後、ユーザーはすぐに画面をスワイプして隣接するページに切り替えることができます。スムーズなページ切り替えを実現するには、最初のページの表示と同時に、`createPageInContainer()` を使用して隣接するページも読み込む必要があります。そのため、ViewPager の読み込み時に `createPageInContainer()` が 2 回呼び出されます。 `destroyPageFromContainer()` メソッドは、特定のページを破棄するために使用されます。ViewPager は最大 3 ページを同時にキャッシュします。3 ページを超える表示ページを作成する場合は、アプリケーションのクラッシュを防ぐために、ViewPager 内で余分なページを破棄する必要があります。
(2)ViewPager機能の実装 ページスクロール機能は、PageSliderクラスを継承するViewPagerクラスによって実装されています。このクラスは主に、画面のスクロールに応じてページを切り替えるために使用されます。このクラスは、slideLock()、setCanSlide()、isCanScroll()という3つのインターフェースを提供しており、ユーザーはこれらのインターフェースを他の機能を開発する際に呼び出すことができます。isCanScroll()メソッドはページがスクロール可能かどうかを判定し、slideLock()メソッドはページをスクロール不可に設定し、setCanSlide()メソッドはページをスクロール可能に設定します。
詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したHarmonyOSテクノロジーコミュニティ。 https://harmonyos..com |