編輯:Android開發實例
首先來張效果圖,沒有經過美工處理的 實現基本功能
其實做這個項目復習了很多內容,將之前單個項目中用到的某些功能綜合到一起了,例如1、自定義標題欄2、Java和JavaScript的互調3、Activity實現仿Dialog樣式4、多線程實現考試倒計時5、退出Activity時保存配置信息(考試剩余時間)6、熟悉UI布局
上面這些效果中,講講通過Java和JavaScript互調實現點擊文本中縮略圖彈出一個大圖。
最開始想實現這種效果的時候就想到了TextView控件,因為TextView通過Html這個類可以在文本中插入圖片。但是有個問題困擾著我,一個文本中的圖片個數是不確定的,我怎樣在一個TextView中添加多個圖片(這個好解,通過TextView的append方法可以拼接任意張,因為這裡的縮略圖都是相同的,但這卻無法定位我點擊了那個縮略圖,應該彈出那個大圖)。最後實在沒辦法,我想到了WebView這個控件,通過它加載一個本地html頁面,在其中通過給<image />對象添加onclick事件,傳遞一個imgSrc參數給Java方法,透過Java方法打開一個Activity來顯示圖片,ok,整個要實現的效果就完成了。So Easy,雖然最後實現這個效果沒多少代碼,但是從TextView這個控件一路走來到WebView,也耗費了將近一天的功夫,但是這個過程卻非常值得享受,喔,我又懂得了更多。
下面通過代碼一步一步來解析:首先是准備asset中的本地html文件。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body onload="window.JsUseJave.onLoad()">
Write a recount for your newsletter using the notes given _____
<a onClick='setIv("/sdcard/IMG001.png")' > <img id="ig"/></a>
<script language="javascript">
function load(src){
document.getElementById('ig').src=src;
}
function setIv(src){
window.JsUseJave.setImgSrc(src)
}
</script>
</body>
</html>
1、最開始的時候是想在進入Activity的時候就自動加載圖片
wv.loadUrl("javascript:load('"+imgSrc+"'");
,但是發現一個問題在body的onload()中直接調用js:load(src)方法並沒有執行。沒辦法只能用通過點擊按鈕給圖片加載資源。後來突然想到可以JavaScript和Java互調,就把這一步添加到JavaScriptInterface類中,這個類要自己定義
final class JsUseJaveInterface{
public void setImgSrc(String imgSrc){
Intent intent =new Intent(E6.this,ImageShow.class);
Bundle bundle=new Bundle();
bundle.putString("imgSrc", imgSrc);
intent.putExtras(bundle);
startActivity(intent);
}
//登錄加載圖片
public void onLoad(){
wv.loadUrl("javascript:load('"+src+"')");
}
}
設置JavaScript可調用Java
wv.addJavascriptInterface(new JsUseJaveInterface(), "JsUseJave");
在html文件body的onload事件中通過java轉一步調用javascript方法中的load(src)事件。這樣就能在加載Activity的時候將縮略圖同時顯示出來了。
2、有了前面的經驗,點擊縮略圖彈出大圖就好實現了。給<image/>添加點擊事件間接的去調用Java中的一個方法重新打開一個Activity顯示大圖,就是上面的自定義的JsUseJavaInteface中的setImgSrc()方法。
**js調用Java中方法:window.JsUseJave.onLoad(),JsUseJave是wv.addJavascriptInterface(new JsUseJaveInterface(), "JsUseJave");中的別名,onLoad()則是JsUseJaveInterface這個類中定義的一個方法。
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
之前在一篇文章中已經講過了菜單項的創建方法,但是那種方法效率較低,維護不易,現在實現另一種方法創建菜單。 MenuInflater,通過此類我們可以輕松的創建菜單
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我