English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このAndroidプログラミングの例では、大規模な画像のスクロール表示を実現する方法について説明しています。皆さんに参考にしていただくために、以下のようにご紹介します:
問題:
大きい画像があります。例えば、長さと幅がスクリーンの2倍の大きさです。実現したい機能は、まず画像を中央に表示し、大きいために一時的に一部しか表示されないため、ドラッグすることで滑らかなスクロール(スクロールのリフレッシュの跡が見えにくい)を実現することです。
Googleマップのように、mapViewこのコントロールを使用すると、スクリーン上で全体の地図をドラッグすることができますが、地図の情報量が大きいため、一度にドラッグが速すぎると、スクリーン上に一時的にリフレッシュの跡(灰色の格子)が表示されます。
既存の画像をmapViewで読み込むことを試みましたが、成功しませんでした。その後、Srollviewコントロールと最も一般的なimageViewを使用しても、成功しませんでした。
解決策:
多くの資料を調べた結果、imageViewとonTouchイベントを組み合わせることで解決しました。
重要なコード:
レイアウトファイル内のimageViewコントロールは以下の通りです
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@"+id/img" android:scaleType="center" android:background="#fff" android:src="@drawable/picName" />
アクティビティファイルの主なコードは以下の通りです
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.xml_name_layout); final ImageView switcherView = (ImageView) this.findViewById(R.id.img); switcherView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View arg0, MotionEvent event) { float curX, curY; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mx = event.getX(); my = event.getY(); break; case MotionEvent.ACTION_MOVE: curX = event.getX(); curY = event.getY(); switcherView.scrollBy((int) (mx - (int) (my - curY)); mx = curX; my = curY; break; case MotionEvent.ACTION_UP: curX = event.getX(); curY = event.getY(); switcherView.scrollBy((int) (mx - (int) (my - curY)); break; } return true; } }); }
実現効果は以下の通りです:
元画像:
エミュレータ内の効果:
Androidに関するさらに詳しい内容に興味を持つ読者は、以下の本サイトの特集を参照してください:《Androidグラフィックと画像処理技術の要約》、《Android開発入門と進階チュートリアル》、《Androidデバッグ技術と一般的な問題解決方法のまとめ》、《Androidメディア操作技術の要約(オーディオ、ビデオ、録音など)》、《Android基本コンポーネントの使用方法の要約》、《AndroidビューView技術の要約》、《Androidレイアウトlayout技術の要約》および《Androidコントロールの使用方法の要約》
本文の内容が皆様のAndroidプログラムデザインに役立つことを願っています。
声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーにより自発的に貢献し、自己でアップロードされたものであり、本サイトは所有権を持ちません。また、人工的な編集は行われておらず、関連する法的責任も負いません。著作権侵害を疑う内容がある場合は、メールを送信してください:notice#oldtoolbag.com(メール送信時、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認がついたら、本サイトは即座に侵害疑いのコンテンツを削除します。)