package com.vanco.abplayer.fragment;
import com.vanco.abplayer.R;
import com.vanco.abplayer.adapter.GameListAdapter;
import com.vanco.abplayer.adapter.ItemsAdapter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnTouchListener;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.AbsListView.OnScrollListener;
public class BangumiFragment extends Fragment{
private ListView listViewLeft;
private ListView listViewRight;
private ItemsAdapter leftAdapter;
private ItemsAdapter rightAdapter;
int[] leftViewsHeights;
int[] rightViewsHeights;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.items_list, container, false);
listViewLeft = (ListView) rootView.findViewById(R.id.list_view_left);
listViewRight = (ListView) rootView.findViewById(R.id.list_view_right);
loadItems();
listViewLeft.setOnTouchListener(touchListener);
listViewRight.setOnTouchListener(touchListener);
listViewLeft.setOnScrollListener(scrollListener);
listViewRight.setOnScrollListener(scrollListener);
return rootView;
}
// Passing the touch event to the opposite list
OnTouchListener touchListener = new OnTouchListener() {
boolean dispatched = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.equals(listViewLeft) && !dispatched) {
dispatched = true;
listViewRight.dispatchTouchEvent(event);
} else if (v.equals(listViewRight) && !dispatched) {
dispatched = true;
listViewLeft.dispatchTouchEvent(event);
}
dispatched = false;
return false;
}
};
/**
* Synchronizing scrolling
* Distance from the top of the first visible element opposite list:
* sum_heights(opposite invisible screens) - sum_heights(invisible screens) + distance from top of the first visible child
*/
OnScrollListener scrollListener = new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView v, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (view.getChildAt(0) != null) {
if (view.equals(listViewLeft) ){
leftViewsHeights[view.getFirstVisiblePosition()] = view.getChildAt(0).getHeight();
int h = 0;
for (int i = 0; i < listViewRight.getFirstVisiblePosition(); i++) {
h += rightViewsHeights[i];
}
int hi = 0;
for (int i = 0; i < listViewLeft.getFirstVisiblePosition(); i++) {
hi += leftViewsHeights[i];
}
int top = h - hi + view.getChildAt(0).getTop();
listViewRight.setSelectionFromTop(listViewRight.getFirstVisiblePosition(), top);
} else if (view.equals(listViewRight)) {
rightViewsHeights[view.getFirstVisiblePosition()] = view.getChildAt(0).getHeight();
int h = 0;
for (int i = 0; i < listViewLeft.getFirstVisiblePosition(); i++) {
h += leftViewsHeights[i];
}
int hi = 0;
for (int i = 0; i < listViewRight.getFirstVisiblePosition(); i++) {
hi += rightViewsHeights[i];
}
int top = h - hi + view.getChildAt(0).getTop();
listViewLeft.setSelectionFromTop(listViewLeft.getFirstVisiblePosition(), top);
}
}
}
};
private void loadItems(){
Integer[] leftItems = new Integer[]{R.drawable.c1, R.drawable.c2, R.drawable.c3, R.drawable.c4, R.drawable.c5};
Integer[] rightItems = new Integer[]{R.drawable.c6, R.drawable.c7, R.drawable.c8, R.drawable.c9, R.drawable.c10};
String[] lefttexts = new String[]{"御神乐学园组曲","摸索吧!部活剧 第三季","怪盗JOKER 第二季","SHOW BY ROCK!!","雨色可可"};
String[] righttexts = new String[]{"攻壳机动队ARISE ALTERNATIVE ARCHITECTURE","亚尔斯兰战记","JOJO的奇妙冒险",
"黑子的篮球 第三季","可塑性记忆"};
leftAdapter = new ItemsAdapter(getActivity(), R.layout.item, leftItems,lefttexts);
rightAdapter = new ItemsAdapter(getActivity(), R.layout.item, rightItems,righttexts);
listViewLeft.setAdapter(leftAdapter);
listViewRight.setAdapter(rightAdapter);
leftViewsHeights = new int[leftItems.length];
rightViewsHeights = new int[rightItems.length];
}
}