Galleryでのサブビュー処理Clickイベント
Galleryでビューに応答するクリックイベントであればsetOnItemClickListenerを設定すればよい.通常の写真閲覧では複雑なインタラクティブな処理ロジックはありません.しかし、galleryのビューが簡単な写真ではなく複雑なビューである場合(Galleryの柔軟な応用は多くの便利さをもたらします).マルチスクリーン切り替えのデスクトップ効果(androidデスクトップのworkspace効果など)を模倣する必要がある場合は、ViewFlipperを使用するかandroidソースコードからworkspaceを抽出する以外に、galleryもかなり良い代替方法です.galleryの従来の切り替えアニメーション効果とその成熟した安定性は、自分で車輪を作るリスクよりも小さい.
Gallery内のビューが複雑なレイアウトである場合、画面内のサブビューがtouch、clickなどのイベントを引き継ぐ必要があることは避けられない.残念なことに、GalleryのビューがOnClickListenerを自分で処理すると、galleryがダイヤルできなくなります.ScrollViewがListViewをスクロールできないという問題に遭遇したように、この2つのコントロールの設計上の欠陥であるはずです.本論文では,類似の競合の解決策を検討する.Gallery内のビューがOnClickListenerイベントを処理した後にダイヤルできないのは、サブビューがtouchイベントを引き継いだ後にgallery処理に戻らないためである.解決策は簡単です.サブビューでtouchイベントを処理した後、galleryに処理させてください.次に、前の「whatsnewインタフェース」の例を借りて説明します.コアのコードは以下の通りです.
gallery.setAdapter(new ArrayAdapter<Integer>(ctx, 0, WHATSNEW) {
public View getView(int position, View convertView, final ViewGroup parent) {
ImageView image = null;
if (convertView == null) {
image = new ImageView(getContext()){
public boolean onTouchEvent(MotionEvent event) {
boolean b=super.onTouchEvent(event);
// gallery
gallery.onTouchEvent(event);
return b;
}
};
image.setScaleType(ScaleType.FIT_XY);
image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
} else {
image = (ImageView) convertView;
}
//
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(ctx, "you click me!", Toast.LENGTH_LONG).show();
}
});
image.setBackgroundColor(Color.BLACK);
image.setImageResource(WHATSNEW[position]);
return image;
}
});
同様に、ScrollViewがListViewに遭遇した場合は、この方法を使えばよい!