網(wǎng)站首頁 編程語言 正文
使用Android原生WebView+Highcharts實(shí)現(xiàn)可左右滑動(dòng)的折線圖_Android
作者:移動(dòng)端開發(fā)_小黑 ? 更新時(shí)間: 2022-07-15 編程語言前言
今天的內(nèi)容是使用Android原生webview配合Highcharts開發(fā)折線圖左右滑動(dòng)的功能,折線圖有很多優(yōu)秀的第三方庫可以使用,比如MPAndroidChart、Highcharts,MPAndroidChart可以通過拉伸折線圖界面進(jìn)行滑動(dòng)折線圖,親測有效,現(xiàn)在我要講的是如何使用內(nèi)嵌html頁面進(jìn)行滑動(dòng)折線圖的開發(fā)。效果以及源碼目錄結(jié)構(gòu)如下圖,源碼地址:gitee.com/fjjxxy/slid…
開發(fā)的思路如下:
1.編寫activity,內(nèi)含一個(gè)webview控件
2.編寫工具類,與js進(jìn)行交互,傳輸一些數(shù)據(jù)(例如網(wǎng)絡(luò)請(qǐng)求需要的參數(shù))
3.編寫html與js代碼,通過Android與js約定好的方法名進(jìn)行數(shù)據(jù)的獲取,完成Android與js的交互
4.調(diào)整html中div的寬度,達(dá)到自己想要的滑動(dòng)以及折線圖效果
(一)設(shè)計(jì)Android端的View層
activity_main.xml代碼如下:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> ? <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java代碼如下:如果想與js進(jìn)行交互,不要忘了加上第17行進(jìn)行數(shù)據(jù)傳輸
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = findViewById(R.id.webView);
initWebView(new HashMap<>());
}
?
public void initWebView(Map<String, String> map) {
// 啟用支持javascript
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.addJavascriptInterface(new JsDataUtils(map), "android");
mWebView.loadUrl("file:///android_asset/line.html");
}
}
(二)設(shè)計(jì)與JS交互的方法
JsDataUtils.java的代碼如下,通過@JavascriptInterface與js進(jìn)行交互,傳輸數(shù)據(jù),這里傳輸?shù)氖蔷W(wǎng)絡(luò)請(qǐng)求需要的參數(shù),到時(shí)候可以在js中使用ajax請(qǐng)求數(shù)據(jù)并繪制折線圖,但是我們這里為了方便,只用模擬數(shù)據(jù)進(jìn)行演示
public class JsDataUtils {
private Map<String, String> map;
private Gson mGson = new Gson();
?
/**
* 通過構(gòu)造函數(shù)像js傳遞網(wǎng)絡(luò)請(qǐng)求的參數(shù),以map作為容器,后面再轉(zhuǎn)成字符串
*
* @param map
*/
public JsDataUtils(Map<String, String> map) {
this.map = map;
}
?
@JavascriptInterface
public String stringToHtml()
{
return mGson.toJson(map);
}
}
(三)開發(fā)html以及js邏輯
line.html代碼如下?:這里通過調(diào)整div的寬度決定折線圖X軸的間隔劃分,已知如果不進(jìn)行間隔設(shè)置的話默認(rèn)是均分
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="js/highcharts.js"></script>
<script type="text/javascript" src="js/jquery.mCustomScrollbar.min.js"></script>
<script src="js/line.js"></script>
?
</head>
<body>
<div id="container" style="width:2000px;height:400px;"></div>
<script type="text/javascript" src="js/line.js" charset="utf-8"></script>
</body>
</html>
line.js?代碼如下:14-22行是進(jìn)行ajax請(qǐng)求數(shù)據(jù),最后在chart的series中的data屬性進(jìn)行賦值繪制,這里使用測試數(shù)據(jù)進(jìn)行演示,第6行是獲取activity中傳輸?shù)臄?shù)據(jù)
var newArray=new Array();
var chart=null;
$(document).ready(function() {
//通過Android方法來獲取參數(shù)map,轉(zhuǎn)成json對(duì)象獲取參數(shù)
var mapJson=android.stringToHtml();
var map=JSON.parse(mapJson);
function ajax_data() {
//這里先用死數(shù)據(jù)進(jìn)行測試,網(wǎng)絡(luò)請(qǐng)求可以使用下面的ajax
var dataArr = [400,-500,300,200,400,-500,300,200,400,-500,300,200,400,-500,300,200,
400,-500,300,200,400,-500,300,200,400,-500,300,200,400,-500,300,200,
400,-500,300,200,400,-500,300,200,400,-500,300,200,400,-500,300,200,
400,-500,300,200,400,-500,300,200,400,-500,300,200,400,-500,300,200];
/*$.ajax({
type : "GET",
url : "",//網(wǎng)絡(luò)請(qǐng)求接口地址
async : false,
dataType : "json",
success : function(data){
//這里處理返回的數(shù)據(jù),即data
}
});*/
return dataArr;
}
chart = Highcharts.chart('container', {
legend: {
align: 'left',
verticalAlign: 'top',
x: 70,
y: -12,
itemDistance: 1,
itemStyle: {color:'#666', fontWeight:'normal' }
},
title: {text: ''},
credits: {enabled: false},
xAxis: [{
categories: [],
crosshair: true,
tickmarkPlacement: 'on',
tickPosition: 'inside',
tickInterval:1,
labels: {
// step:1,
// enabled:false,
style: {
color: '#999'
}
}
}],
chart:{
},
scrollbar:{
enabled:false
},
yAxis: [{
gridLineDashStyle: 'Dash',
gridLineColor: '#c7c7c7',
gridLineWidth: 1,
min:-1000,
tickInterval:50,
title:"",//刪除y軸注釋
max:1000,
}],
tooltip: {
shared: true
},
series: [{
name: '數(shù)據(jù)',
type: 'line',
yAxis: 0,
data: ajax_data(),
color: Highcharts.getOptions().colors[3],
tooltip: {
valueSuffix: ''
},
lineWidth:0.5,
marker: {
symbol: 'circle',
lineWidth: 0.5,
lineColor: Highcharts.getOptions().colors[3],
fillColor: 'white'
}
}]
});
});
以上三步,我們可左右滑動(dòng)的折線圖就完成了,效果圖和源碼地址在開頭
總結(jié)
原文鏈接:https://juejin.cn/post/7099100553333964836
相關(guān)推薦
- 2021-12-08 教你如何在windows?10家庭版上安裝docker_docker
- 2022-11-30 簡易的redux?createStore手寫實(shí)現(xiàn)示例_React
- 2022-11-20 關(guān)于rust的模塊引入問題_相關(guān)技巧
- 2022-08-05 利用jQuery?treetable實(shí)現(xiàn)樹形表格拖拽詳解_jquery
- 2022-08-21 Python?正則?re.compile?真的必需嗎_python
- 2022-02-06 TP6記錄報(bào)錯(cuò)的SQL語句
- 2022-11-26 React常見跨窗口通信方式實(shí)例詳解_React
- 2023-02-02 C語言多文件編程問題解析_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支