亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android實現文字和圖片混排(文字環繞圖片)效果

2020-04-11 11:21:25
字體:
來源:轉載
供稿:網友

本文實例講述了Android實現文字和圖片混排(文字環繞圖片)效果。分享給大家供大家參考,具體如下:

在平時我們做項目中,或許有要對一張圖片或者某一個東西進行文字和圖片說明,這時候要求排版美觀,所以會出現文字和圖片混排的情況,如圖:

這種情況就是上下兩個文字說明是連續在一起的,這就要求我們計算上面的文字說明怎么和下面的文字說明連貫結合在一起呢,這就要求我們進行計算了,下面給出代碼,代碼中也有詳細的注釋,原理也很簡單。

因為算是比較簡單,直接就在activity中去計算了:

package com.example.test; import android.app.Activity; import android.graphics.Paint; import android.os.Bundle; import android.view.ViewTreeObserver; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends Activity {   boolean imageMeasured = false;   TextView tv_right;   TextView tv_bottom;   static final String text = "葉凡:小說主角,與眾老同學在泰山聚會時一同被九龍拉棺帶離地球," +       "進入北斗星域,得知自己是荒古圣葉凡 葉凡體。歷險禁地,習得源術,斗圣地世家,戰太古生物," +       "重組天庭,葉凡輾轉四方得到許多際遇和挑戰,功力激增,眼界也漸漸開闊。一個浩大的仙俠世界," +       "就以他的視角在讀者面前展開。姬紫月:姬家小姐,出場年齡十七歲。被葉凡劫持一同經歷青銅古殿歷險," +       "依靠碎裂的神光遁符解除禁制,反過來挾持葉凡一同進入太玄派尋找秘術。" +       "在葉凡逃離太玄后姬紫月在孔雀王之亂中被華云飛追殺,又與葉凡[2]相遇,被葉凡護送回姬家" +       ",漸漸對葉凡產生微妙感情。后成為葉凡的妻子,千載后于飛仙星成仙,在葉凡也進入仙路后再見龐博:" +       "葉凡大學時最好的朋友,壯碩魁偉,直率義氣。到達北斗星域后因服用了圣果被靈墟洞天作為仙苗," +       "在青帝墳墓處為青帝十九代孫附體離去,肉身被錘煉至四極境界。后葉凡與黑皇鎮壓老妖神識," +       "龐博重新掌控自己身軀,取得妖帝古經和老妖本體祭煉成的青蓮法寶,習得妖帝九斬和天妖八式," +       "但仍偽裝成老妖留在妖族。出關后找上葉凡,多次與他共進退。星空古路開啟后由此離開北斗," +       "被葉凡從妖皇墓中救出,得葉凡授予者字秘、一氣化三清,與葉凡同闖試煉古路,一起建設天庭";   // 屏幕的高度   int screenWidth = 0;   // 總共可以放多少個字   int count = 0;   // textView全部字符的寬度   float textTotalWidth = 0.0f;   // textView一個字的寬度   float textWidth = 0.0f;   Paint paint = new Paint();   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     tv_right = (TextView) findViewById(R.id.test_tv_right);     tv_bottom = (TextView) findViewById(R.id.test_tv_bottom);     final ImageView imageView = (ImageView) findViewById(R.id.test_image);     imageView.setImageResource(R.drawable.ee);     screenWidth = getWindowManager().getDefaultDisplay().getWidth();     /**      * 獲取一個字的寬度      */     textWidth = tv_right.getTextSize();     paint.setTextSize(textWidth);     /**      * 因為圖片一開始的時候,高度是測量不出來的,通過增加一個監聽器,即可獲取其圖片的高度和長度      */     ViewTreeObserver vto = imageView.getViewTreeObserver();     vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {       public boolean onPreDraw() {         if (!imageMeasured) {           imageMeasured = true;           int height = imageView.getMeasuredHeight();           int width = imageView.getMeasuredWidth();           drawImageViewDone(width, height);         }         return imageMeasured;       }     });   }   private void drawImageViewDone(int width, int height) {     // 一行字體的高度     int lineHeight = tv_right.getLineHeight();     // 可以放多少行     int lineCount = (int) Math.ceil((double) height / (double) lineHeight);     // 一行的寬度     float rowWidth = screenWidth - width - tv_right.getPaddingLeft() - tv_right.getPaddingRight();     // 一行可以放多少個字     int columnCount = (int) (rowWidth / textWidth);     // 總共字體數等于 行數*每行個數     count = lineCount * columnCount;     // 一個TextView中所有字符串的寬度和(字體數*每個字的寬度)     textTotalWidth = (float) ((float) count * textWidth);     measureText();     tv_right.setText(text.substring(0, count));     // 檢查行數是否大于設定的行數,如果大于的話,就每次減少一個字符,重新計算行數與設定的一致     while (tv_right.getLineCount() > lineCount) {       count -= 1;       tv_right.setText(text.substring(0, count));     }     tv_bottom.setPadding(0, lineCount * lineHeight - height, 0, 0);     tv_bottom.setText(text.substring(count));   }   /**    * 測量已經填充的長度,計算其剩下的長度    */   private void measureText() {     String string = text.substring(0, count);     float size = paint.measureText(string);     int remainCount = (int) ((textTotalWidth - size) / textWidth);     if (remainCount > 0) {       count += remainCount;       measureText();     }   } }

其中xml文件布局如下:

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:orientation="vertical" >   <RelativeLayout     android:layout_width="fill_parent"     android:layout_height="wrap_content" >     <ImageView       android:id="@+id/test_image"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:scaleType="fitXY" />     <TextView       android:id="@+id/test_tv_right"       android:layout_width="fill_parent"       android:layout_height="wrap_content"       android:layout_toRightOf="@id/test_image"       android:gravity="fill_horizontal"       android:paddingLeft="7dp"       android:textSize="16sp" />     <TextView       android:id="@+id/test_tv_bottom"       android:layout_width="fill_parent"       android:layout_height="wrap_content"       android:layout_below="@id/test_image"       android:gravity="fill_horizontal"       android:textSize="16sp" />   </RelativeLayout> </ScrollView>

代碼很少,原理也很簡單,后來發現這種做法在大部分手機運行是完美的,但是少部分手機還是有點問題。是什么問題呢,是在我們測量textView的長度的是,因為是我們剛剛進行setText,然后馬上進行測量,這樣得到的結果是不正確的,所以大家可以優化一下。溫馨提示,當我們setText之后,可以延時一些時間再去測量,這樣獲取的值就是掙錢的了,當然那個延遲的時間很短50毫秒就可以了,因為我們要相信textView的繪制速度還是很快的。

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91日韩在线播放| 久久精品成人欧美大片古装| 97在线视频精品| 国产亚洲欧洲在线| 欧美日韩综合视频| 91精品国产综合久久香蕉的用户体验| 92裸体在线视频网站| 色妞在线综合亚洲欧美| 亚洲精品日韩av| 久久久精品一区二区三区| 亚洲风情亚aⅴ在线发布| 日韩成人av在线| 国产视频观看一区| 国产99视频精品免视看7| 亚洲乱码国产乱码精品精| 日韩av电影免费观看高清| 成人444kkkk在线观看| 国产成人高清激情视频在线观看| 久久偷看各类女兵18女厕嘘嘘| 久久影院资源站| 91精品视频免费观看| 国产精品一区二区三区成人| 亚洲理论片在线观看| 国外视频精品毛片| 2019亚洲日韩新视频| 韩国精品美女www爽爽爽视频| 国产精品678| 97视频国产在线| 日本老师69xxx| 97视频免费在线看| 亚洲成色999久久网站| 欧美激情精品久久久久久免费印度| 日本精品久久久久影院| 一本色道久久88亚洲综合88| 久久精品国产亚洲精品2020| 日韩精品免费在线播放| 国产精品精品久久久| 日韩免费观看网站| 国产精品第二页| 狠狠躁夜夜躁人人爽天天天天97| 中文字幕无线精品亚洲乱码一区| 黑人欧美xxxx| 日本成人精品在线| 午夜精品久久久久久久白皮肤| 亚洲国产精品99久久| 欧美成人免费全部| 亚洲精品美女久久久| 国产精品入口免费视频一| 国产精品日韩久久久久| 成人国产精品日本在线| 欧美成人午夜激情在线| 成人黄色片网站| 日本aⅴ大伊香蕉精品视频| 91伊人影院在线播放| 亚洲最大福利网站| 狠狠操狠狠色综合网| 日韩电影中文 亚洲精品乱码| 亚洲人成在线一二| 亚洲精品视频免费| 国产乱肥老妇国产一区二| 高清日韩电视剧大全免费播放在线观看| 国内精品免费午夜毛片| 久久在线观看视频| 色阁综合伊人av| 欧美最猛性xxxxx免费| 不卡毛片在线看| 亚洲欧美一区二区三区久久| 97香蕉久久超级碰碰高清版| 亚洲国内精品在线| 98精品国产自产在线观看| 国产极品精品在线观看| 免费不卡在线观看av| 欧美床上激情在线观看| 国产成人av网| 亚洲欧美日韩一区二区在线| 日韩中文字幕在线看| 26uuu亚洲伊人春色| 欧美日韩xxxxx| 成人妇女淫片aaaa视频| 国产综合在线视频| 免费不卡在线观看av| 精品久久久久久中文字幕| 4k岛国日韩精品**专区| 欧美激情亚洲激情| 成人福利视频在线观看| 欧美大成色www永久网站婷| 亚洲国产古装精品网站| 久久免费成人精品视频| 久久天天躁夜夜躁狠狠躁2022| 日韩性生活视频| 亚洲欧美精品中文字幕在线| 中日韩美女免费视频网站在线观看| 久久成人精品电影| 欧美一区在线直播| 国模精品系列视频| 日韩在线视频导航| 日韩二区三区在线| 欧美亚洲国产视频小说| 国产婷婷成人久久av免费高清| 亚洲色图35p| 亚洲欧洲中文天堂| 最好看的2019年中文视频| 国产亚洲精品久久久久久| 国产欧美日韩精品在线观看| 久久欧美在线电影| 久久男人资源视频| 亚洲天堂av在线播放| 日韩精品www| 成人免费高清完整版在线观看| 亚洲www永久成人夜色| 国产精品流白浆视频| 久久精品国产亚洲精品| 国产一区二区日韩| 国产精品中文字幕在线观看| 97超级碰在线看视频免费在线看| 精品国产依人香蕉在线精品| 97超碰国产精品女人人人爽| 欧美日韩电影在线观看| 尤物九九久久国产精品的分类| 日本国产欧美一区二区三区| 国产精品白嫩初高中害羞小美女| 日韩av有码在线| 国产999精品久久久影片官网| 亚洲欧美日韩一区在线| 亚洲国产福利在线| 欧美大片免费观看在线观看网站推荐| 一区二区三区四区在线观看视频| 一区二区三区视频观看| 91po在线观看91精品国产性色| 国产视频一区在线| 九色成人免费视频| 亚洲国产成人久久综合一区| 欧美色视频日本高清在线观看| 欧美中文字幕在线观看| 成人av色在线观看| 91国自产精品中文字幕亚洲| 亚洲一区二区三区xxx视频| 欧美怡红院视频一区二区三区| 在线观看精品自拍私拍| 欧美精品18videosex性欧美| 亚洲性无码av在线| 在线观看欧美日韩国产| 777午夜精品福利在线观看| 亚洲国产91色在线| 国产日本欧美一区二区三区在线| 日韩av大片免费看| 91在线|亚洲| 欧美日韩福利视频| 色多多国产成人永久免费网站| 2018国产精品视频| 91牛牛免费视频| 久久久午夜视频| 日韩视频精品在线| 性欧美xxxx视频在线观看| 日韩av网站电影| 国产精品揄拍一区二区| 韩国国内大量揄拍精品视频| 欧美xxxx18性欧美| 国产精品永久免费观看| 亚洲午夜激情免费视频| 亚洲新声在线观看| 色综合色综合久久综合频道88| 欧美黑人国产人伦爽爽爽| 一区二区三区国产在线观看|