package com.hupu.games.fragment;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import com.hupu.games.R;
import com.hupu.games.adapter.GameDataListAdapter;
import com.hupu.games.data.MatchEntity;
import com.hupu.games.view.HScrollView;
import com.hupu.games.view.PinnedHeaderXListView;
public class BaseBasketballFragment extends Fragment {
public HScrollView scrollView;
/** 球队统计数据 */
public PinnedHeaderXListView mLvDatas;
public GameDataListAdapter mDataListAdapter;
public TableLayout mTable;
/**
* 比分统计标题栏共有多少栏
* */
protected int i_columnSize;
/** 最多有多少次加时赛 */
protected static final int MAX_OT_SIZE = 5;
/** 初始化时总分所在的索引位置 */
protected static final int COLUMN_TOTAL_INDEX = 5;
protected static final int TITLE_TOTAL_INDEX = 9;
/**
* 比分统计标题栏
* */
protected String[] arrTitles;
/**
* 比分统计key值
* */
protected LinkedList<String> listKeys;
protected Activity mAct;
protected View mProgressBar;
ListViewTouchLinstener touchListener;
boolean bGetData;
protected String homeName;
protected String awayName;
/** 季后赛主胜场次 */
protected int iHomeSeries;
/** 季后赛客胜场次 */
protected int iAwaySeries;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAct = getActivity();
if (arrTitles == null) {
listKeys = new LinkedList<String>();
arrTitles = mAct.getResources().getStringArray(R.array.title_score);
listKeys.addAll(Arrays.asList(mAct.getResources().getStringArray(
R.array.key_score)));
}
}
public void setScrollView(HScrollView s) {
scrollView = s;
}
public void addData(boolean b) {
bGetData = b;
if (bGetData && mProgressBar != null)
mProgressBar.setVisibility(View.GONE);
}
/** 设置表格数据,需要动态添加加时数据 */
public void setTableData(MatchEntity entityHome, MatchEntity entityAway) {
// arrHomeScore = new TextView[9];
// arrAwayScore = new TextView[9];
int otTime = 0;
if (entityHome != null)
otTime = entityHome.otTimes;
if (entityAway != null)
otTime = entityAway.otTimes > otTime ? entityAway.otTimes : otTime;
if (otTime > i_columnSize - 6 && otTime <= MAX_OT_SIZE) {
// 有加时赛自动添加,但是最多只能添加5场
int size = entityHome.otTimes + 6 - i_columnSize;
for (int i = 0; i < size; i++) {
// System.out.println("add colum=" );
addColumn();
}
}
String ss = null;
String key = null;
for (int i = 0; i < i_columnSize; i++) {
if (i == 0) {
// 主客队名字
getTextView(1, 0).setText(homeName);
getTextView(2, 0).setText(awayName);
} else {
if (i == i_columnSize - 1)
key = listKeys.getLast();
else {
key = listKeys.get(i - 1);
}
if (entityHome != null) {
ss = entityHome.mapScore.get(key);
if (ss != null && !"".equals(ss)) {
getTextView(1, i).setText(ss);
copyTableData(true, key, ss);
}
}
if (entityAway != null) {
ss = entityAway.mapScore.get(key);
if (ss != null && !"".equals(ss)) {
getTextView(2, i).setText(ss);
copyTableData(false, key, ss);
}
}
}
}
}
public void copyTableData(boolean home, String key, String value) {
}
/** 初始化表格 */
public void initRow() {
TableRow.LayoutParams lp = new TableRow.LayoutParams();
lp.setMargins(0, 0, 1, 1);
for (int rowIndex = 0; rowIndex < 3; rowIndex++) {// 三行
TableRow row = new TableRow(mAct);
for (int column = 0; column < 6; column++) {// 6列
TextView tv = buildTextView(rowIndex);
if (rowIndex == 0) {
if (column == COLUMN_TOTAL_INDEX)// 总分
{
tv.setText(arrTitles[TITLE_TOTAL_INDEX]);
lp.weight = 1;
} else if (column > 0) {
tv.setText(arrTitles[column - 1]);
lp.weight = 0;
}
}
row.addView(tv, lp);
}
mTable.addView(row, new TableLayout.LayoutParams());
}
i_columnSize = 6;
// addColumn();
}
private void addColumn() {
TableRow row;
for (int rowIndex = 0; rowIndex < 3; rowIndex++) {
row = (TableRow) mTable.getChildAt(rowIndex);
TextView tv = buildTextView(0);
if (rowIndex == 0) {
tv.setText(arrTitles[TITLE_TOTAL_INDEX]);
tv.setTextColor(colorTitle);
((TextView) row.getChildAt(i_columnSize - 1))
.setText(arrTitles[i_columnSize - 2]);
} else
tv.setTextColor(Color.WHITE);
TableRow.LayoutParams lp = new TableRow.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.weight = 1;
lp.setMargins(0, 0, 1, 1);
row.addView(tv, lp);
}
i_columnSize++;
}
int colorTitle;
/**
* @param type
* 0 表示标题 1表示数据
* */
private TextView buildTextView(int type) {
TextView tv = new TextView(mAct);
tv.setBackgroundResource(R.drawable.shape_gray);
if (type == 0) {
if (colorTitle == 0)
colorTitle = getActivity().getResources().getColor(
R.color.table_title);
tv.setTextColor(colorTitle);
} else
tv.setTextColor(Color.WHITE);
tv.setGravity(Gravity.CENTER_HORIZONTAL);
return tv;
}
private TextView getTextView(int row, int column) {
return (TextView) ((TableRow) mTable.getChildAt(row))
.getChildAt(column);
}
public class ListViewTouchLinstener implements View.OnTouchListener {
float historicX = Float.NaN;
static final int DELTA_ON_CLICK = 20;
float x0;
float y0;
@SuppressLint("NewApi")
@Override
public boolean onTouch(View arg0, MotionEvent event) {
if (scrollView != null)
scrollView.onTouchEvent(event);
if (mLvDatas != null)
mLvDatas.invalidate();
return gesture.onTouchEvent(event);
}
}
public ArrayList<String> getKeys() {
if (mDataListAdapter != null)
return mDataListAdapter.getKeys();
return null;
}
private GestureDetector gesture;
/** 初始化手势,主要是让统计数据能够左右移动 */
public void initGesture() {
gesture = new GestureDetector(getActivity(), new MyGestureDetector());
}
/** 手势监听类 */
class MyGestureDetector extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 50;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 60;
// Touch了滑动一点距离后,up时触发
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e2 == null) {
return false;
}
if (e1 == null) {
return false;
}
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
public boolean onDoubleTap(MotionEvent e) {
return super.onDoubleTap(e);
}
public boolean onDoubleTapEvent(MotionEvent e) {
// Log.i("MyGesture", "onDoubleTapEvent");
return super.onDoubleTapEvent(e);
}
public boolean onDown(MotionEvent e) {
// Log.i("MyGesture", "onDown");
return super.onDown(e);
}
public void onLongPress(MotionEvent e) {
// Log.i("MyGesture", "onLongPress");
super.onLongPress(e);
}
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return super.onScroll(e1, e2, distanceX, distanceY);
}
public void onShowPress(MotionEvent e) {
super.onShowPress(e);
}
public boolean onSingleTapUp(MotionEvent e) {
return super.onSingleTapUp(e);
}
}
}