Android開發(fā)學(xué)習(xí)筆記之通過API接口將LaTex數(shù)學(xué)函數(shù)表達(dá)式轉(zhuǎn)化為圖片形式
本文將講解如何通過codecogs.com和Google.com提供的API接口來將LaTeX數(shù)學(xué)函數(shù)表達(dá)式轉(zhuǎn)化為圖片形式。具體思路如下:
(1)通過EditText獲取用戶輸入的LaTeX數(shù)學(xué)表達(dá)式,然后對(duì)表達(dá)式格式化使之便于網(wǎng)絡(luò)傳輸。
(2)將格式化之后的字符串,通過Http請(qǐng)求發(fā)送至codecogs.com或者Google.com。
(3)獲取網(wǎng)站返回的數(shù)據(jù)流,將其轉(zhuǎn)化為圖片,并顯示在ImageView上。
具體過程為:
1、獲取并格式化LaTeX數(shù)學(xué)表達(dá)式
首先,我們?cè)谶@個(gè)網(wǎng)站輸入LaTeX數(shù)學(xué)公式然后返回圖片時(shí),即“http://latex.codecogs.com/gif.latex?“后面跟上我們輸入的公式內(nèi)容。比如”http://latex.codecogs.com/gif.latex?\alpha”就顯示一個(gè)希臘字母\alpha。所以我們可以在其后加上我們希望轉(zhuǎn)換的公式即可。但是需要注意的是,網(wǎng)絡(luò)URL中的空格有時(shí)候會(huì)自動(dòng)轉(zhuǎn)化為加號(hào)”+“。所以,我們?cè)趥鬏數(shù)臅r(shí)候需要將空格去掉?;蛘邔⑵滢D(zhuǎn)換為”%20“。Button單擊時(shí)執(zhí)行。
首先要添加網(wǎng)絡(luò)訪問權(quán)限:
<uses-permission android:name="android.permission.INTERNET"/>
String PicUrlCogs = "http://latex.codecogs.com/gif.latex?";
Url = new URL(PicUrlCogs + editText.getText().toString().replace(" ",""));
new MyDownloadTask().execute(); // 執(zhí)行Http請(qǐng)求
while(!finishFlag) {} // 等待數(shù)據(jù)接收完畢
imageView.setImageBitmap(pngBM); // 顯示圖片
finishFlag = false; // 標(biāo)識(shí)回位
2、發(fā)送Http請(qǐng)求
這里,我們發(fā)送Http請(qǐng)求采取異步線程的方式。首先,獲取上一步得到的URL地址,然后建立一個(gè)Http鏈接,然后將返回的數(shù)據(jù)輸入到輸入流中,最后將輸入流進(jìn)行解碼為圖片并顯示在ImageView中。
protected Void doInBackground(Void... params) {
try {
URL picUrl = Url; // 獲取URL地址
HttpURLConnection conn = (HttpURLConnection) picUrl.openConnection();
// conn.setConnectTimeout(1000); // 建立連接
// conn.setReadTimeout(1000);
conn.connect(); // 打開連接
if (conn.getResponseCode() == 200) { // 連接成功,返回?cái)?shù)據(jù)
InputStream ins = conn.getInputStream(); // 將數(shù)據(jù)輸入到數(shù)據(jù)流中
pngBM = BitmapFactory.decodeStream(picUrl.openStream()); // 解析數(shù)據(jù)流
finishFlag = true; // 數(shù)據(jù)傳輸完畢標(biāo)識(shí)
ins.close(); // 關(guān)閉數(shù)據(jù)流
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
完整的MyDownloadTask類代碼(在MainActivity內(nèi)):
3、顯示圖片
在上一步建立的網(wǎng)絡(luò)連接類,然后在Button單擊事件內(nèi)實(shí)例化一個(gè)此類來接收數(shù)據(jù),然后將返回的數(shù)據(jù)顯示在ImageView內(nèi)。
btnPreview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Url = new URL(PicUrlCogs + editText.getText().toString().replace(" ","")); // 轉(zhuǎn)換字符串
new MyDownloadTask().execute(); // 執(zhí)行Http請(qǐng)求
while(!finishFlag) {} // 等待數(shù)據(jù)接收完畢
imageView.setImageBitmap(pngBM); // 顯示圖片
finishFlag = false; // 標(biāo)識(shí)回位
} catch (Exception e) {
e.printStackTrace();
}
}
});
這樣,我們?cè)谳斎隠aTeX公式之后,單擊PREVIEW按鈕,就會(huì)在ImageView上顯示對(duì)應(yīng)的圖片了。由于本文只討論如何進(jìn)行轉(zhuǎn)化,并沒有對(duì)圖片進(jìn)行任何優(yōu)化處理,可能看起來比較小。另外,如果采取去空格轉(zhuǎn)化URL的方法,盡量保證LaTeX表達(dá)式是嚴(yán)格合法的(比如所有單元都用{}括起來)。
Screenshot_2015-11-17-22-21-34 Screenshot_2015-11-17-22-23-00
完整代碼:
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends Activity {
private String PicUrlGoogle = "http://chart.apis.google.com/chart?cht=tx&chl=";
private String PicUrlCogs = "http://latex.codecogs.com/gif.latex?";
private Button btnPreview;
private EditText editText;
private ImageView imageView;
private Bitmap pngBM;
private URL Url;
private boolean finishFlag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnPreview = (Button) findViewById(R.id.btnPreview);
imageView = (ImageView) findViewById(R.id.imageView);
editText = (EditText) findViewById(R.id.editText);
btnPreview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Url = new URL(PicUrlCogs + editText.getText().toString().replace(" ","")); // 轉(zhuǎn)換字符串
new MyDownloadTask().execute(); // 執(zhí)行Http請(qǐng)求
while(!finishFlag) {} // 等待數(shù)據(jù)接收完畢
imageView.setImageBitmap(pngBM); // 顯示圖片
finishFlag = false; // 標(biāo)識(shí)回位
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
}
class MyDownloadTask extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
//display progress dialog.
}
protected Void doInBackground(Void... params) {
try {
URL picUrl = Url; // 獲取URL地址
HttpURLConnection conn = (HttpURLConnection) picUrl.openConnection();
// conn.setConnectTimeout(1000); // 建立連接
// conn.setReadTimeout(1000);
conn.connect(); // 打開連接
if (conn.getResponseCode() == 200) { // 連接成功,返回?cái)?shù)據(jù)
InputStream ins = conn.getInputStream(); // 將數(shù)據(jù)輸入到數(shù)據(jù)流中
pngBM = BitmapFactory.decodeStream(picUrl.openStream()); // 解析數(shù)據(jù)流
finishFlag = true; // 數(shù)據(jù)傳輸完畢標(biāo)識(shí)
ins.close(); // 關(guān)閉數(shù)據(jù)流
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
// dismiss progress dialog and update ui
}
}
}
以上內(nèi)容是小編給大家介紹的關(guān)于Android開發(fā)學(xué)習(xí)筆記之通過API接口將LaTex數(shù)學(xué)函數(shù)表達(dá)式轉(zhuǎn)化為圖片形式,希望大家喜歡。
- android 微信 sdk api調(diào)用不成功解決方案
- android monkey自動(dòng)化測(cè)試改為java調(diào)用monkeyrunner Api
- Android 高版本API方法在低版本系統(tǒng)上的兼容性處理
- Android 調(diào)用百度地圖API示例
- android開發(fā)教程之獲取使用當(dāng)前api的應(yīng)用程序名稱
- android通過google api獲取天氣信息示例
- android通過Location API顯示地址信息的實(shí)現(xiàn)方法
- Android通過原生APi獲取所在位置的經(jīng)緯度
- Android提高之藍(lán)牙隱藏API探秘
- Android指紋識(shí)別API初試
- Android 支付寶支付、微信支付、銀聯(lián)支付 整合第三方支付接入方法(后臺(tái)訂單支付API設(shè)計(jì))
- Android4.4 WebAPI實(shí)現(xiàn)拍照上傳功能
- 使用android隱藏api實(shí)現(xiàn)亮度調(diào)節(jié)的方法
- Android API開發(fā)之SMS短信服務(wù)處理和獲取聯(lián)系人的方法
- Android 用 camera2 API 自定義相機(jī)
- Android基于API的Tabs3實(shí)現(xiàn)仿優(yōu)酷t(yī)abhost效果實(shí)例
- Android 多媒體播放API簡單實(shí)例
- 最新Android版本、代號(hào)、對(duì)應(yīng)API/NDK級(jí)別、發(fā)布時(shí)間及市場(chǎng)份額
相關(guān)文章
Android利用Flutter實(shí)現(xiàn)立體旋轉(zhuǎn)效果
本文主要介紹了Flutter繪圖如何使用ImageShader填充圖形,并且利用 Matrix4的三維變換加上動(dòng)畫實(shí)現(xiàn)了立體旋轉(zhuǎn)的動(dòng)畫效果,感興趣的可以嘗試一下2022-06-06
Android手動(dòng)檢查并申請(qǐng)權(quán)限方法
今天小編就為大家分享一篇Android手動(dòng)檢查并申請(qǐng)權(quán)限方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Android開發(fā)實(shí)現(xiàn)圖片大小與質(zhì)量壓縮及保存
這篇文章主要為大家介紹了Android開發(fā)實(shí)現(xiàn)圖片大小與質(zhì)量壓縮及保存的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Android基于OpenCV實(shí)現(xiàn)圖像脫色
脫色是將彩色圖像轉(zhuǎn)換為灰度圖像的過程。同時(shí),它也是數(shù)字打印,風(fēng)格化的黑白照片渲染以及許多單通道圖像處理應(yīng)用程序中的基本工具。本文講述基于OpenCV實(shí)現(xiàn)圖像脫色的步驟2021-06-06
Android使用setCustomTitle()方法自定義對(duì)話框標(biāo)題
Android有自帶的對(duì)話框標(biāo)題,但是不太美觀,如果要給彈出的對(duì)話框設(shè)置一個(gè)自定義的標(biāo)題,使用AlertDialog.Builder的setCustomTitle()方法非常方便,接下來通過本文給大家介紹Android使用setCustomTitle()方法自定義對(duì)話框標(biāo)題,感興趣的朋友一起學(xué)習(xí)吧2016-02-02
詳解Android6.0運(yùn)行時(shí)權(quán)限管理
自從Android6.0發(fā)布以來,在權(quán)限上做出了很大的變動(dòng),不再是之前的只要在manifest設(shè)置就可以任意獲取權(quán)限,而是更加的注重用戶的隱私和體驗(yàn)。本文詳細(xì)介紹了Android6.0運(yùn)行時(shí)權(quán)限管理。需要的朋友一起來看下吧2016-12-12
詳解Android中App的啟動(dòng)界面Splash的編寫方法
這篇文章主要介紹了Android中App的啟動(dòng)界面Splash的編寫方法,需要的朋友可以參考下2016-02-02

