K线图解决方案

u010269599 2016-09-01 10:19:11
公司项目有K线图这一块,使用的开放源码是MPChartLib
数据引入整合这块和公司提供接口的数据没办法整合
因为没有这方面的经验,如果有用过MPChartLib,或者有k线图这方面自绘经验的希望能得到你们的帮助。

调用的主页模块部分代码
/**
* 日线图的Fragment
*/
public class KLineDayFragment extends BaseFragment {

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
bc_kline.setAutoScaleMinMaxEnabled(true);
cbc_kline.setAutoScaleMinMaxEnabled(true);
cbc_kline.notifyDataSetChanged();
bc_kline.notifyDataSetChanged();
cbc_kline.invalidate();
bc_kline.invalidate();
}
};

@Override
public View initContentPager(Context context) {
View view = View.inflate(context, R.layout.frgm_kline_day, null);
x.view().inject(this, view);
initChatConfig();//初始化图表设置
getOffLineData();
return view;
}

private void getOffLineData() {
/*方便测试,加入假数据*/
mData = new DataParse();
JSONObject object = null;
try {
object = new JSONObject(ConstantTest.KLINEURL);
} catch (JSONException e) {
e.printStackTrace();
}
mData.parseKLine(object);

mData.getKLineDatas();
setData(mData);
}

/**
* 初始化K线图和柱状图的设置
*/
private void initChatConfig() {


// 将K线控的滑动事件传递给交易量控件
cbc_kline.setOnChartGestureListener(new CoupleChartGestureListener(cbc_kline, new Chart[]{bc_kline}));
// 将交易量控件的滑动事件传递给K线控件
bc_kline.setOnChartGestureListener(new CoupleChartGestureListener(bc_kline, new Chart[]{cbc_kline}));
bc_kline.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {



ArrayList<ILineDataSet> sets = new ArrayList<>();
sets.add(setMaLine(5, xVals, line5Entries));
sets.add(setMaLine(10, xVals, line10Entries));
sets.add(setMaLine(30, xVals, line30Entries));


CombinedData combinedData = new CombinedData(xVals);
LineData lineData = new LineData(xVals, sets);
combinedData.setData(candleData);
combinedData.setData(lineData);
cbc_kline.setData(combinedData);
cbc_kline.moveViewToX(mData.getKLineDatas().size() - 1);
final ViewPortHandler viewPortHandlerCombin = cbc_kline.getViewPortHandler();
viewPortHandlerCombin.setMaximumScaleX(culcMaxscale(xVals.size()));
Matrix matrixCombin = viewPortHandlerCombin.getMatrixTouch();
final float xscaleCombin = 3;
matrixCombin.postScale(xscaleCombin, 1f);
cbc_kline.moveViewToX(mData.getKLineDatas().size() - 1);
bc_kline.moveViewToX(mData.getKLineDatas().size() - 1);
setOffset();

/****************************************************************************************
此处解决方法来源于CombinedChartDemo,k线图y轴显示问题,图表滑动后才能对齐的bug,希望有人给出解决方法
(注:此bug现已修复,感谢和chenguang79一起研究)
****************************************************************************************/

handler.sendEmptyMessageDelayed(0, 300);

}

@NonNull
private LineDataSet setMaLine(int ma, ArrayList<String> xVals, ArrayList<Entry> lineEntries) {
LineDataSet lineDataSetMa = new LineDataSet(lineEntries, "ma" + ma);
if (ma == 5) {
lineDataSetMa.setHighlightEnabled(true);
lineDataSetMa.setDrawHorizontalHighlightIndicator(false);
lineDataSetMa.setHighLightColor(Color.WHITE);
} else {/*此处必须得写*/
lineDataSetMa.setHighlightEnabled(false);
}
lineDataSetMa.setDrawValues(false);
if (ma == 5) {
lineDataSetMa.setColor(Color.GREEN);
} else if (ma == 10) {
lineDataSetMa.setColor(Color.GRAY);
} else {
lineDataSetMa.setColor(Color.YELLOW);
}
lineDataSetMa.setLineWidth(1f);
lineDataSetMa.setDrawCircles(false);
lineDataSetMa.setAxisDependency(YAxis.AxisDependency.LEFT);
return lineDataSetMa;
}
/*设置量表对齐*/
private void setOffset() {

/*注:setExtraLeft...函数是针对图表相对位置计算,比如A表offLeftA=20dp,B表offLeftB=30dp,则A.setExtraLeftOffset(10),并不是30,还有注意单位转换*/
if (barLeft < lineLeft) {
/* offsetLeft = Utils.convertPixelsToDp(lineLeft - barLeft);
barChart.setExtraLeftOffset(offsetLeft);*/
transLeft = lineLeft;
} else {
offsetLeft = Utils.convertPixelsToDp(barLeft - lineLeft);
cbc_kline.setExtraLeftOffset(offsetLeft);
transLeft = barLeft;
}
/*注:setExtraRight...函数是针对图表绝对位置计算,比如A表offRightA=20dp,B表offRightB=30dp,则A.setExtraLeftOffset(30),并不是10,还有注意单位转换*/



...全文
730 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧