您的位置:首页 > 其它

关于类似美团团购gallery的联动更新

2015-01-04 15:43 218 查看
在美团上的gallery是进行过修改的,主要的改动是滑动的时候一次一个,没有快速滑动,去掉了回弹效果。

猜测实现的代码是:

import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.Gallery;

public class SlideOnePageGallery extends Gallery {
private static final String TAG = "SlideOnePageGallery";
private Context mContext;

public SlideOnePageGallery(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.mContext = context;
}

public SlideOnePageGallery(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
}

public SlideOnePageGallery(Context context) {
super(context);
this.mContext = context;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int kEvent;
if (isScrollingLeft(e1, e2)) {
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
} else {
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return false;

}

private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {
return e2.getX() > e1.getX();
}

}


以上代码肯定不是他的实现方式,因为仔细看的话他们应该还有速度大小的监听,即对velocityX的值大小有限制,防止太慢,混淆和scroll的区别。

然后是对监听的设置:

movieGallery.setCallbackDuringFling(false);
movieGallery.setUnselectedAlpha(1.0f);
movieGallery
.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent,
final View view, int position, long id) {
if (last_view != null) {
if ((view instanceof FrameLayout)
&& (last_view instanceof FrameLayout)) {

Log.i(TAG, "FrameLayout");
((FrameLayout) last_view)
.setForeground(mContext
.getResources()
.getDrawable(
R.drawable.foreground_dark));
last_view = view;
// ResourceUtils
// .startBrightnessAnim(((ImageView)
// ((FrameLayout) last_view)
// .findViewById(R.id.photoview_image))
// .getDrawable());
((FrameLayout) last_view)
.setForeground(mContext
.getResources()
.getDrawable(
R.drawable.foreground_light));

} else {

Log.i(TAG, "View");
}
} else {
last_view = view;
// ResourceUtils
// .startBrightnessAnim(((ImageView)
// ((FrameLayout) last_view)
// .findViewById(R.id.photoview_image))
// .getDrawable());
((FrameLayout) last_view)
.setForeground(mContext
.getResources()
.getDrawable(
R.drawable.foreground_light));

}

toShowIndex = position;
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (showingIndex != toShowIndex) {
showingIndex = toShowIndex;

movie_title.setText(mMovies
.get(showingIndex
% mMovies.size()).moviename);
movie_grade.setText(mMovies
.get(showingIndex
% mMovies.size()).generalmark);
DataListMovies(
mCinema.cinemaid,
mMovies.get(showingIndex
% mMovies.size()).movieid);
}
}
};
Thread checkChange = new Thread() {
@Override
public void run() {
int myIndex = toShowIndex;
try {
sleep(TIME_OUT_DISPLAY);
if (myIndex == toShowIndex) {
handler.sendEmptyMessage(0);

}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};

checkChange.start();
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub

}
});


上面的实现是将选中的view的前景色变亮,未选中的变暗,同时关联大下面电影详情部分的变化,列出场次。

对于日期导航,使用HorizontalScrollView和RadioGroup来实现。列表显示电影安排使用viewpager。

同时在viewpager的监听和RadioGroup的监听做关联处理,同时动态滚动HorizontalScrollView。

在这些处理时遇到的问题及解决的办法在前面已经有了文章说明,可以从这里看到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: