私はこのトピックで多くのことを検索して試しました。私がやろうとしているのは、基本的に垂直のギャラリー/カバーフローです。これはカスタム ListView で行う必要があることを認識しています。そして、私はまさにそれをしました。
これを行うと、解決できない2つの問題があるようです。
i) リストをスクロールするとき、アイテムを「スロット」で移動させたい。最も重要なことは、中央に配置されたアイテムが、私が描いた roundRect の真上に移動する必要があることです。より良い視覚化のために:それはまさに「CoverFlow」が行うことですが、水平方向です。onScrollStateChanged をオーバーライドしようとすると、非決定的に動作するようです。これは私が試した方法です:
public void registerScrollListener(){
setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == OnScrollListener.SCROLL_STATE_IDLE){
int first = getFirstVisiblePosition();
int last = getLastVisiblePosition();
List<View> childs = new ArrayList<View>();
for(int i = first; i < last; i++){
childs.add(getChildAt(i));
}
int centerHeight = getHeightCenterOfSideView();
int centerPos = 0;
int distance = Integer.MAX_VALUE;
for(View childView : childs){
int newDist = Math.abs(centerHeight - (childView.getTop() + (childView.getHeight()/2)));
if(newDist < distance){
distance = newDist;
centerPos = childs.indexOf(childView);
}
}
View childView = getChildAt(centerPos);
smoothScrollToPosition(centerPos, centerHeight - (childView.getTop() + (childView.getHeight()/2)));
}
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
});
}
ii) 非円形の ListView でスクロールすると、さらにスクロールするとリストビューが空になるため、最後のアイテムまたは最初のアイテムを中央に配置できません。これを行う可能性は、最後と上部にいくつかの余分な項目を追加することです. 問題は、リストビューセパレーターを使用したいのですが、空のビューがあると見苦しくなります。もう1つは、これをディスプレイサイズに依存しないようにしたいということです。これは、最後のアイテムが正確に中央に配置されないことを確認して、難しいはずです。
これらの2つの質問のいずれかを手伝ってくれる人はいますか? 最も簡単なのは、既存のコードを使用することです。
ありがとう!