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

首頁 > 系統 > Android > 正文

Android自定義View實現圓形環繞效果

2019-10-21 21:26:02
字體:
來源:轉載
供稿:網友

之前項目中需要實現一個四周環繞中心圓形頭像的效果,感覺還是自定義比較方便,于是就自己封裝了一個控件去實現。先貼張圖顯示最終效果。

Android,自定義View,圓形環繞

首先自定義一個View繼承自LinearLayout,通過動態添加childView的方式將子控件添加到View中。思路是先添加中間圓形頭像,然后添加周圍的小圖標。

1.實現了圓形頭像的顯示,可以去參考網上或github上的demo,圓形頭像的外圈其實是一個View,然后再把頭像這個View蓋到這個View上。

2.計算好周圍相鄰view之間的角度,這里是要水平鋪滿,最多6個,所以相鄰之間的角度為180/ (6 - 1) = 36度。如果是360環繞,放n個圖標,則相鄰之間的角度應該為360 / n 。

3.設置圖標到圓心的距離r。距離要大于頭像的半徑加上圖標的半徑。

4.確定圖標的坐標:控件的寬為width,高為height。假設左邊第一個圖標是起始位置。圖標的起始角度為α= 180 - 36 * i,則它的橫坐標為width/2 + cos(α)r,縱坐標為height/2 - sin(α) r。

5.設置坐標點,默認為圖標的左上角頂點和右下點,如果想設圖標的中心點為坐標,則左上定點x、y分別減去width/2和height/2,右下角分別加上width/2、height/2。

下面附上主要代碼:

package com.ihaveu.iuzuan.cardgame.widget;import android.content.Context;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;import com.ihaveu.iuzuan.cardgame.R;import com.ihaveu.iuzuan.cardgame.util.MeasureUtil;import java.util.ArrayList;import java.util.List;/** * Created by zhouhui on 17-6-8. * 添加圓形子控件實現時鐘環繞效果 */public class CircleImageLayout extends LinearLayout{ private double mAngle = 0;//初始角度 private int mX, mY;//子控件位置 private int mWidth, mHeight;//控件長寬 private int mRadius;//子控件距離控件圓心位置 private int mCount; private List<CircleImageView> mCircleImageViewList; private CircleImageView mCircleImageView; public CircleImageLayout(Context context) {  this(context, null); } public CircleImageLayout(Context context, @Nullable AttributeSet attrs) {  this(context, attrs, 0); } public CircleImageLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  mCircleImageViewList = new ArrayList<>(); } /**  * 設置子控件到控件圓心的位置  */ public void setRadius(int radius) {  mRadius = radius; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  super.onMeasure(widthMeasureSpec, heightMeasureSpec);  mWidth = getMeasuredWidth();  mHeight = getMeasuredHeight(); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) {  super.onLayout(changed, left, top, right, bottom);  initDraw(); } public void initDraw() {  mCount = getChildCount();  for (int i = 0; i < mCount; i++) {   View child = getChildAt(i);   child.getWidth();   child.getHeight();   if (i == 0) {    mX = mWidth / 2;    mY = mHeight / 2;   } else {    mAngle = 180 - 180 / (mCount - 1) * (i - 1);    mX = (int) (mWidth / 2 + Math.cos(Math.toRadians(mAngle)) * mRadius);    mY = (int) (mHeight / 2 - Math.sin(Math.toRadians(mAngle)) * mRadius);   }   child.layout(mX - child.getWidth() / 2, mY - child.getHeight() / 2, mX + child.getWidth() / 2, mY + child.getHeight() / 2);  } } /**  * 初始化環繞數量半徑  */ public void init(int count, int radius) {  mRadius = radius;  for (int i = 0; i < count + 1; i++) {   CircleImageView imageView = new CircleImageView(getContext());   if (i == 0) {    //i為0時為圓型頭像    View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_header, null, true);    mCircleImageView = (CircleImageView) view.findViewById(R.id.iv_header);    addView(view);   } else {    addView(imageView, MeasureUtil.dip2px(15), MeasureUtil.dip2px(15));    mCircleImageViewList.add(imageView);   }  } }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费网视频| 国产精品一区二区av影院萌芽| 国产精品成久久久久三级| 97成人精品区在线播放| 中文字幕日本欧美| 日韩欧美aaa| 亚洲欧美一区二区三区四区| 久久久久久久国产| 欧美成人剧情片在线观看| 91欧美激情另类亚洲| 国产亚洲视频在线观看| 国产成人av网| 精品久久中文字幕久久av| 日韩中文第一页| 亚洲欧洲成视频免费观看| 国产欧美最新羞羞视频在线观看| 高清一区二区三区日本久| 97在线视频免费观看| 777午夜精品福利在线观看| 欧美精品性视频| 一个人看的www欧美| 亚洲日本aⅴ片在线观看香蕉| 91精品免费久久久久久久久| 国内久久久精品| 欧美极品美女视频网站在线观看免费| 欧美日韩精品中文字幕| 欧美一区二区三区精品电影| 国内精品模特av私拍在线观看| 日韩有码视频在线| 国产精品视频男人的天堂| zzjj国产精品一区二区| 欧美日韩中文字幕日韩欧美| 国产丝袜一区视频在线观看| 国产91色在线|免| 成人美女免费网站视频| 成人黄色av网站| 亚洲女人被黑人巨大进入| 精品国产乱码久久久久久婷婷| 日韩av电影手机在线观看| 色综合久久88| 69精品小视频| 欧美二区乱c黑人| 超碰97人人做人人爱少妇| 国产精品美女网站| 欧美性xxxx极品hd欧美风情| 国产精品福利片| 精品国产精品三级精品av网址| 国产欧美日韩最新| 国内成人精品一区| 国产日韩欧美视频在线| 久久伊人精品视频| 九九热最新视频//这里只有精品| 欧洲亚洲在线视频| 丁香五六月婷婷久久激情| 九九九久久国产免费| 麻豆国产精品va在线观看不卡| 韩剧1988在线观看免费完整版| 国产免费一区二区三区在线观看| 国产精品视频网| 欧美日韩一二三四五区| 国产综合久久久久久| 亚洲欧美国产一区二区三区| 在线看日韩av| 亚洲欧美中文字幕在线一区| 精品国内产的精品视频在线观看| 欧美性视频网站| 奇米四色中文综合久久| 亚洲毛片在线免费观看| 日韩av123| 亚洲最新中文字幕| 欧美黄色www| 中文字幕日韩在线观看| 国产剧情久久久久久| 国产精品揄拍一区二区| 欧美与黑人午夜性猛交久久久| 久久久黄色av| 国产综合视频在线观看| 亚洲美女精品成人在线视频| 成人免费大片黄在线播放| 久久久久久69| 曰本色欧美视频在线| 日韩毛片在线观看| 亚洲永久免费观看| 成人精品一区二区三区| 国产精品久久久久久亚洲调教| 亚洲国产精品电影在线观看| 欧美人在线视频| 26uuu日韩精品一区二区| 日韩av快播网址| 欧美精品免费看| 黑人狂躁日本妞一区二区三区| 91精品国产自产在线老师啪| 欧美激情在线视频二区| 日韩精品一二三四区| 日韩av一区二区在线| 亚洲护士老师的毛茸茸最新章节| 日韩中文在线视频| 97婷婷涩涩精品一区| 日韩美女写真福利在线观看| 91九色单男在线观看| 中文字幕在线成人| 97视频在线观看成人| 精品久久久精品| 亚洲精品免费av| 久久人人爽人人爽人人片av高清| 尤物精品国产第一福利三区| 日韩免费av一区二区| 7777免费精品视频| 欧美视频第一页| 国产精品久久二区| 国产伦精品免费视频| 亚洲人午夜色婷婷| 在线国产精品视频| 96国产粉嫩美女| 日韩在线欧美在线| 日韩免费av在线| 国产成人亚洲综合91| 国产精品嫩草视频| 欧洲美女7788成人免费视频| 欧美国产一区二区三区| 精品亚洲夜色av98在线观看| xxxx欧美18另类的高清| 中文字幕国产日韩| 欧美香蕉大胸在线视频观看| 97精品久久久| 亚洲美女免费精品视频在线观看| 久久国产天堂福利天堂| 日韩成人中文字幕| 欧美重口另类videos人妖| 日韩精品在线免费观看| 国产亚洲精品久久久久久777| 久久噜噜噜精品国产亚洲综合| 国产精品成人免费视频| 国产美女精彩久久| xxxx欧美18另类的高清| 国产精品自拍视频| 热门国产精品亚洲第一区在线| 在线精品国产成人综合| 国产91在线播放精品91| 国产日韩在线播放| 国产精品久久久久久久久男| 亚洲乱码国产乱码精品精天堂| 国产91色在线|| 亚洲已满18点击进入在线看片| 亚洲视频在线视频| 国产精品久久久999| 成人妇女淫片aaaa视频| 欧美怡春院一区二区三区| 国产成人精品午夜| 日韩欧美综合在线视频| 国产精品国产自产拍高清av水多| 国产一区二区美女视频| 欧洲日本亚洲国产区| 色午夜这里只有精品| 亚洲视频自拍偷拍| 午夜精品久久久久久99热软件| 国产高清视频一区三区| 色多多国产成人永久免费网站| 欧美国产日韩在线| 国产精品久久久久久久7电影| 91精品视频专区| 中文字幕日韩精品在线| 国产999精品久久久| 亚洲影视中文字幕|