網站首頁 編程語言 正文
前言
今天的內容是使用Android原生webview配合Highcharts開發折線圖左右滑動的功能,折線圖有很多優秀的第三方庫可以使用,比如MPAndroidChart、Highcharts,MPAndroidChart可以通過拉伸折線圖界面進行滑動折線圖,親測有效,現在我要講的是如何使用內嵌html頁面進行滑動折線圖的開發。效果以及源碼目錄結構如下圖,源碼地址:gitee.com/fjjxxy/slid…
開發的思路如下:
1.編寫activity,內含一個webview控件
2.編寫工具類,與js進行交互,傳輸一些數據(例如網絡請求需要的參數)
3.編寫html與js代碼,通過Android與js約定好的方法名進行數據的獲取,完成Android與js的交互
4.調整html中div的寬度,達到自己想要的滑動以及折線圖效果
(一)設計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進行交互,不要忘了加上第17行進行數據傳輸
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");
}
}
(二)設計與JS交互的方法
JsDataUtils.java的代碼如下,通過@JavascriptInterface與js進行交互,傳輸數據,這里傳輸的是網絡請求需要的參數,到時候可以在js中使用ajax請求數據并繪制折線圖,但是我們這里為了方便,只用模擬數據進行演示
public class JsDataUtils {
private Map<String, String> map;
private Gson mGson = new Gson();
?
/**
* 通過構造函數像js傳遞網絡請求的參數,以map作為容器,后面再轉成字符串
*
* @param map
*/
public JsDataUtils(Map<String, String> map) {
this.map = map;
}
?
@JavascriptInterface
public String stringToHtml()
{
return mGson.toJson(map);
}
}
(三)開發html以及js邏輯
line.html代碼如下?:這里通過調整div的寬度決定折線圖X軸的間隔劃分,已知如果不進行間隔設置的話默認是均分
<!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行是進行ajax請求數據,最后在chart的series中的data屬性進行賦值繪制,這里使用測試數據進行演示,第6行是獲取activity中傳輸的數據
var newArray=new Array();
var chart=null;
$(document).ready(function() {
//通過Android方法來獲取參數map,轉成json對象獲取參數
var mapJson=android.stringToHtml();
var map=JSON.parse(mapJson);
function ajax_data() {
//這里先用死數據進行測試,網絡請求可以使用下面的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 : "",//網絡請求接口地址
async : false,
dataType : "json",
success : function(data){
//這里處理返回的數據,即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: '數據',
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'
}
}]
});
});
以上三步,我們可左右滑動的折線圖就完成了,效果圖和源碼地址在開頭
總結
原文鏈接:https://juejin.cn/post/7099100553333964836
相關推薦
- 2022-06-14 C#通過cmd調用7z軟件實現壓縮和解壓文件_C#教程
- 2022-06-06 微信小程序動態綁定class
- 2022-06-30 golang實現簡單rpc調用過程解析_Golang
- 2023-05-30 Pandas.DataFrame行和列的轉置的實現_python
- 2022-07-14 浮點數乘法和整形乘除法的效率經驗比較_C 語言
- 2022-05-25 Starship定制shell提示符實現信息自由_python
- 2021-12-09 帶你一文了解C#中的LINQ_C#教程
- 2022-11-28 詳解如何使用C++寫一個線程安全的單例模式_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支