Android—文本中縮圖點擊彈出大圖效果實現

來源:互聯網
上載者:User

很久沒有寫部落格了,這兩天一直忙於一個關於考試的項目,將其中的一些效果實現的經驗寫下來,希望給看到的人或者給有這方面需求的人協助。

首先來張,沒有經過美工處理的 實現準系統

其實做這個項目複習了很多內容,將之前單個項目中用到的某些功能綜合到一起了,例如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這個類中定義的一個方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.