日常項目中很多時候會用到TextView的高亮展示,然而原生的TextView或多或少會有點不能滿足
玄武網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
步驟一: 項目的 build.gradle 添加
步驟一: App的 build.gradle 添加
參考如下工具類,可以實現(xiàn)在android 中展示gif:
MyGifView.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;
public class MyGifView extends View{
private long movieStart;
private Movie movie;
//此處必須重寫該構(gòu)造方法
public MyGifView(Context context,AttributeSet attributeSet) {
super(context,attributeSet);
//以文件流(InputStream)讀取進gif圖片資源
movie=Movie.decodeStream(getResources().openRawResource(R.drawable.keyboard));
}
@Override
protected void onDraw(Canvas canvas) {
long curTime=android.os.SystemClock.uptimeMillis();
//第一次播放
if (movieStart == 0) {
movieStart = curTime;
}
if (movie != null) {
int duraction = movie.duration();
int relTime = (int) ((curTime-movieStart)%duraction);
movie.setTime(relTime);
movie.draw(canvas, 0, 0);
//強制重繪
invalidate();
}
super.onDraw(canvas);
}
}
此工具類中,只做了2件事情。1,構(gòu)造方法;2,重寫了onDraw()方法。大家以后用的話,只需拷貝此類到你的工程下即可起作用。
這段時間研究了一段時間Android端增強現(xiàn)實的方式,總體分為兩個大類:全景圖和3D模型。
于是基于這兩種形式,以三種方式來展示增強現(xiàn)實:
1.全景360°GIF,支持拖動,縮放。
2.展示3D模型
3.Google官方展示全景圖探究
這篇博客就主要以展示為主吧,放上具體的效果Demo和使用方式,后面會有具體博客用于分析實現(xiàn)方式和技術(shù)難點的。
使用方式:
1.Add it in your root build.gradle at the end of repositories:
Step 2. Add the dependency
大家應(yīng)該在京東和淘寶上見過這種效果吧:
我的實現(xiàn)效果圖:
功能:
使用方式:
XML and Java
在京東上見到過這樣效果的商品:
功能:
使用方式:
XML and Java
官方Demmo地址:
這篇博客主要展示一下功能吧,下面應(yīng)該會分三篇博客,分別介紹前兩種實現(xiàn)過程中的難點和技術(shù)點,和第三種也就是Google官方展示全景圖,從源碼角度看一下Google官方的實現(xiàn)方式。
這是正?,F(xiàn)象。在android系統(tǒng)中,為了不影響正常使用,收到消息時,彈消息是在屏幕上方顯示的,但由于消息內(nèi)容太長,是無法全部顯示的。
Android 系統(tǒng)從5.0開始支持矢量圖,可以通過 Android Studio自帶的 Vector Assert 工具將SVG、PSD 轉(zhuǎn)成VectorDrawble。
轉(zhuǎn)化好的VectorDrawblew看起來好像挺復(fù)雜,是不是完全看不懂。沒關(guān)系,只要轉(zhuǎn)化的圖形沒有問題,你不用關(guān)心其內(nèi)部數(shù)據(jù)。
我們直接進入矢量動畫部分。
矢量動畫的實現(xiàn)通過在xml定義animated-vector標簽(其對應(yīng)的Java對象是AnimatedVectorDrawable)實現(xiàn),如下所示:
可以看到animated-vector標簽是主要元素是target,它其實就起到一個橋梁作用,將動畫和VectorDraw中的圖形聯(lián)系起來。
比如target1,它將屬性動畫splash_animator_draw和vectorDrawble對象中name等于line1的對象聯(lián)系起來,即:動畫將生效在line1對象上。
之前展示了由svg圖片通過Android Studio Vector Assert工具轉(zhuǎn)換過來的VectorDrawble,里面的實際上svg畫圖語法,path標簽里的pathData包含了畫圖的路徑(坐標)和語法
在實際使用過程中有幾率遇到這樣兩個問題(筆者都遇到過):
其實以上兩個問題都要求你掌握進階知識,svg畫圖語法。
官方svg語法解析:
不喜歡看英文,去這篇博客:
對于Android程序員,Lottie的動畫使用很簡單,步驟如下:
1.接入Lottie
從動畫實現(xiàn)上來說,Lottie動畫應(yīng)該是最簡單的方法了。
Lottie的優(yōu)點很明顯:
Lottie的缺點:
好了,如果覺得本文對你有幫助,請關(guān)注、留言、點贊我,謝謝!