【移動應(yīng)用開發(fā)技術(shù)】Android開發(fā)中怎么實(shí)現(xiàn)一個長按將文章生成圖片的功能_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android開發(fā)中怎么實(shí)現(xiàn)一個長按將文章生成圖片的功能_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android開發(fā)中怎么實(shí)現(xiàn)一個長按將文章生成圖片的功能_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android開發(fā)中怎么實(shí)現(xiàn)一個長按將文章生成圖片的功能_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android開發(fā)中怎么實(shí)現(xiàn)一個長按將文章生成圖片的功能_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】Android開發(fā)中怎么實(shí)現(xiàn)一個長按將文章生成圖片的功能

這篇文章將為大家詳細(xì)講解有關(guān)Android開發(fā)中怎么實(shí)現(xiàn)一個長按將文章生成圖片的功能,文章內(nèi)容質(zhì)量較高,因此在下分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。長按菜單實(shí)現(xiàn)WebView可以如下實(shí)現(xiàn):mWebView.setOnCreateContextMenuListener(new

View.OnCreateContextMenuListener()

{

@Override

public

void

onCreateContextMenu(ContextMenu

menu,

View

v,

ContextMenu.ContextMenuInfo

menuInfo)

{

genImg.setVisibility(View.VISIBLE);

T.showSToast(mContext,

"再次點(diǎn)擊文章可隱藏圖片分享");

}

});

//

點(diǎn)擊隱藏底部按鈕

mWebView.setOnTouchListener(new

View.OnTouchListener()

{

@Override

public

boolean

onTouch(View

v,

MotionEvent

event)

{

switch

(event.getAction())

{

case

MotionEvent.ACTION_DOWN:

lastTime

=

SystemClock.uptimeMillis();

break;

case

MotionEvent.ACTION_UP:

if

(SystemClock.uptimeMillis()

-

lastTime

<

300)

{

genImg.setVisibility(View.GONE);

}

break;

}

return

false;

}

});這里通過監(jiān)聽WebView的ContextMenu監(jiān)聽何時(shí)顯示底部按鈕;同時(shí)在onTouch方法中隱藏底部按鈕。genImg.setOnClickListener(new

View.OnClickListener()

{

@Override

public

void

onClick(View

v)

{

genImg.setVisibility(View.INVISIBLE);

Intent

intent

=

new

Intent(FakeJianShuActivity.this,

GenScreenShotActivity.class);

intent.putExtra("data",

mHtmlBean);

startActivity(intent);

}

});點(diǎn)擊底部的Button就會跳轉(zhuǎn)到生成長圖的界面,同時(shí)將之前獲取到的HTMLBean對象傳遞過去。長圖效果實(shí)現(xiàn)這里首先說一下實(shí)現(xiàn)思路(思路來源于此)。?首先通過WebView加載一個本地的Html頁面,這個頁面包含一些固定,定義了一些標(biāo)簽。然后根據(jù)傳遞過來的mHtmlBean對象中的信息,通過執(zhí)行JavaScript動態(tài)的替換靜態(tài)HTML頁面中的內(nèi)容;?關(guān)于黑白兩種風(fēng)格的實(shí)現(xiàn),同樣是WebView執(zhí)行Js,動態(tài)替換HTML中CSS樣式,修改WebView的背景色呈現(xiàn)出兩種不同的UI效果。?通過WebView的capturePicture和Canvas可以生成出當(dāng)前WebView的Bitmap對象,有了這個Bitmap就可以圖片保存的功能了。好了,下面就通過代碼分別實(shí)現(xiàn)上述步驟。Html頁面<html>

<head>

<meta

charset="utf-8"/>

</head>

<body>

<img

src="mark.png"

width="13px"

height="20px"

/>

<article

id="content"

></article>

<script

type="text/javascript">

function

changeContent(content)

{

document.getElementById('content').innerHTML

=

content;

}

</script>

</body>

</html>這個HTML頁面的內(nèi)容很簡單,在整個文檔左上角放置了一個小角標(biāo),就是簡書APP生成長圖時(shí)的那個mark.同時(shí)定義了一個JavaScript方法,功能也很簡單,就是用傳遞的參數(shù)content替換article標(biāo)簽中的文檔內(nèi)容。自定義WebView為了方便,我們自定義WebView,這里看一下核心邏輯:public

class

FakeWebView

extends

WebView

{

private

boolean

isFirstLoad

=

false;

public

void

loadData(HtmlBean

bean)

{

assembleData(bean);

if

(Build.VERSION.SDK_INT

>=

21)

{

isFirstLoad

=

true;

webView.setWebChromeClient(new

WebChromeClient()

{

@Override

public

void

onProgressChanged(WebView

view,

int

newProgress)

{

if

(newProgress

==

100)

{

if

(isFirstLoad)

{

isFirstLoad

=

false;

Log.e("TAG",

"onProgressChanged");

updateView();

}

}

}

});

}

else

{

isFirstLoad

=

true;

webView.setVisibility(View.INVISIBLE);

webView.setWebChromeClient(new

WebChromeClient()

{

@Override

public

void

onProgressChanged(WebView

view,

int

newProgress)

{

if

(newProgress

==

100)

{

updateView();

if

(!isFirstLoad)

webView.setVisibility(View.VISIBLE);

}

}

});

}

webView.loadUrl("file:///android_asset/JianShu.html");

}

private

void

assembleData(HtmlBean

bean)

{

final

String

data

=

bean.getContent();

final

String

title

=

bean.getTitle();

final

String

username

=

bean.getUsername();

final

String

publishTime

=

bean.getPublishTime();

String

Title

=

"<h3>"

+

title

+

"</h3>";

String

Footer

=

"<p>"

+

username

+

"</p><p>"

+

publishTime

+

"</p>";

content

=

Title

+

data

+

Footer;

}

public

void

updateView()

{

if

(mode

==

MODE_DAY)

{

webView.setBackgroundColor(Color.WHITE);

}

else

{

webView.setBackgroundColor(Color.parseColor("#263238"));

content

=

"<div

style=\"color:

gray;display:

inline;\">"

+

content

+

"</div>";

}

webView.loadUrl("javascript:changeContent(\""

+

content.replace("\n",

"\\n").replace("\"",

"\\\"").replace("'",

"\\'")

+

"\")");

}

}這幾個方法是生成長圖最核心的方法。在loadData方法中首先調(diào)用了assembleData,這個方法會根據(jù)mHtmlBean這個對象中的數(shù)據(jù)拼接出一段HTML文檔。在webView的loadUrl方法中會從本地加載之前定義好的JianShu.html這個頁面。然后在頁面加載完成,即onProgressChanged回調(diào)方法中newProgress的值等于100時(shí)調(diào)用updateView方法;這個方法會根據(jù)當(dāng)前設(shè)置的模式,設(shè)置WebView的背景,如果是夜間模式,則會對assembleData中生成的文檔外部在添加一個灰色風(fēng)格的div標(biāo)簽,將整個內(nèi)容包在這個div標(biāo)簽中,最后WebView執(zhí)行JS方法changeContent,傳遞的參數(shù)就是之前我們拼接好的內(nèi)容。這樣整個WebView又會刷新一次,整個WebView的內(nèi)容就是文章內(nèi)容了。GenScreenShotActivity

mFakeWebView

=

(FakeWebView)

findViewById(R.id.fakeWebView);

bean

=

(HtmlBean)

getIntent().getSerializableExtra("data");

RadioGroup

changeMode

=

(RadioGroup)

findViewById(R.id.changeMode);

changeMode.setOnCheckedChangeListener(new

RadioGroup.OnCheckedChangeListener()

{

@Override

public

void

onCheckedChanged(RadioGroup

group,

@IdRes

int

checkedId)

{

if

(checkedId

==

R.id.rb_day)

{

mFakeWebView.setMode(FakeWebView.MODE_DAY);

}

else

{

mFakeWebView.setMode(FakeWebView.MODE_NIGHT);

}

}

});

mFakeWebView.loadData(bean);

/**

*

@param

mode

*/

public

void

setMode(@ViewMode

int

mode)

{

this.mode

=

mode;

updateView();

}這樣在Activity中,mFakeWebView對象通過上一個頁面(文章頁)傳遞的mHtmlBean對象就可以更新當(dāng)前視圖了,同時(shí)可以通過RadioButton實(shí)現(xiàn)頁面風(fēng)格的切換。保存圖片距離我們最后的目標(biāo)生成長圖片,前面的工作可以說只是完成了50%,因?yàn)榈侥壳盀橹刮覀冎徊贿^是在WebView中把整個文章內(nèi)容加載出來而已;長圖還沒有呢。因此,下面的工作就是通過WebView生成長圖。public

Bitmap

getScreenView(){

Picture

snapShot

=

webView.capturePicture();

Bitmap

bmp

=

Bitmap.createBitmap(snapShot.getWidth(),snapShot.getHeight(),

Bitmap.Config.ARGB_8888);

Canvas

canvas

=

new

Canvas(bmp);

snapShot.draw(canvas);

return

bmp;

}WebVeiw很人性化,通過這個方法,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論