国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現多個連續帶數字圓圈效果

2019-10-22 18:31:49
字體:
來源:轉載
供稿:網友

有項目需求需要繪制多個圓圈,并且使用連續的數字對其排列起來,也就是好多排的圓圈。

首先看一下效果圖:

一排設置為8個,一共有53個的:

Android多個連續帶數字圓圈,Android連續帶數字圓圈,Android帶數字圓圈

一排設值為5個的,一共有153個:

Android多個連續帶數字圓圈,Android連續帶數字圓圈,Android帶數字圓圈

可以根據總的個數和每排個數自動調節圓圈的大小,并且根據傳入的監聽事件作出不同的點擊效果。

思路很簡單,首先需要畫一個圓出來:

<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:useLevel="false" > <padding  android:left="1dp"  android:top="1dp"  android:right="1dp"  android:bottom="1dp" /> <stroke  android:width="1dp"  android:color="@android:color/black" /> <size android:width="10dp"   android:height="10dp" /></shape>

然后創建TextView,設置TextView的背景為這個drawable即可。

可以根據屏幕的總寬度和每排需要放置的圓個數,計算出每一個圓的合適大小,然后設置每個圓之間的margin為這個圓的十分之一,所以這個圓的最后大小應該為平均值的十分之八。

然后使用LinearLayout布局,動態加載多個TextView,每個TextView設置好對應的屬性即可。

由于可能圓的個數過多,所以需要ScrollView來進行嵌套,從而支持滑動事件,需要注意的就是ScrollView下面只能有一個子節點。

完整代碼:

import android.content.Context;import android.os.Build;import android.support.annotation.RequiresApi;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.LinearLayout;import android.widget.ScrollView;import android.widget.TextView;/** * Created by leafage on 2017/7/21. */public class CircleView { private LinearLayout mMainLinearLayout; private ScrollView mScrollView; private LinearLayout mLinearLayout; private WindowManager mWindowManager; private Context mContext; //全屏參數 LinearLayout.LayoutParams MatchParams = new LinearLayout.LayoutParams(   ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); //用來設置內部LinearLayout的參數,寬度適應父布局,高度自動 LinearLayout.LayoutParams LinearLayoutParams = new LinearLayout.LayoutParams(   ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); //設置TextView的參數 LinearLayout.LayoutParams TextViewParams = new LinearLayout.LayoutParams(   LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); public CircleView(Context context) {  mContext = context;  mMainLinearLayout = new LinearLayout(context);  mLinearLayout = new LinearLayout(context);  mScrollView = new ScrollView(context);  //用來得到總屏幕的寬度  mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);  init(); } private void init() {  mLinearLayout.setOrientation(LinearLayout.VERTICAL);  mMainLinearLayout.setLayoutParams(MatchParams);//最外面的全屏  mScrollView.setLayoutParams(MatchParams);//滾動的全屏  mLinearLayout.setLayoutParams(MatchParams);//內容的全屏  mLinearLayout.setOrientation(LinearLayout.VERTICAL);//垂直放置 } @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) public LinearLayout getLinearLayout(int column, int count, View.OnClickListener onClickListener) {  int row = count / column;//計算出多少排  int duoyu = count - row * column;//計算出多余的個數  int totalWidth = mWindowManager.getDefaultDisplay().getWidth();//得到總的寬度  int width = totalWidth / column;//計算出每排的每個圓圈的平均寬度  int margin = (int) (width*0.1);//設置邊距為0.1  width = (int) (width * 0.8);//去掉左右邊距剩下的寬度  int num = 1;//從1開始計數  TextViewParams.setMargins(margin, margin, margin, margin);  for (int i = 0 ; i < row; i++) {//一共繪制多少排   LinearLayout linearLayout = new LinearLayout(mContext);   linearLayout.setLayoutParams(LinearLayoutParams);   linearLayout.setOrientation(LinearLayout.HORIZONTAL);   for (int j = 0; j < column; j++) {//一排繪制多少個    final TextView textView = new TextView(mContext);    textView.setBackground(mContext.getResources().getDrawable(R.drawable.cricle));    textView.setHeight(width);    textView.setWidth(width);    textView.setGravity(Gravity.CENTER);    textView.setText(String.valueOf(num));    textView.setLayoutParams(TextViewParams);    textView.setOnClickListener(onClickListener);//設置監聽事件    linearLayout.addView(textView);    num++;   }   mLinearLayout.addView(linearLayout);  }  //繪制剩下多余的一排  LinearLayout linearLayout = new LinearLayout(mContext);  linearLayout.setLayoutParams(LinearLayoutParams);  linearLayout.setOrientation(LinearLayout.HORIZONTAL);  for (int i = 0 ; i< duoyu;i++) {   TextView textView = new TextView(mContext);   textView.setBackground(mContext.getResources().getDrawable(R.drawable.cricle));   textView.setHeight(width);   textView.setWidth(width);   textView.setGravity(Gravity.CENTER);   textView.setText(String.valueOf(num));   textView.setLayoutParams(TextViewParams);   textView.setOnClickListener(onClickListener);   linearLayout.addView(textView);   num++;  }  mLinearLayout.addView(linearLayout);  mScrollView.addView(mLinearLayout);  mMainLinearLayout.addView(mScrollView);  return mMainLinearLayout; }}

可以直接在Activity里面使用:

import android.os.Build;import android.os.Bundle;import android.support.annotation.RequiresApi;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity{ private LinearLayout mMainLayout; @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  CircleView circle = new CircleView(this);  mMainLayout = circle.getLinearLayout(8, 53, new View.OnClickListener() {   @Override   public void onClick(View view) {    Toast.makeText(MainActivity.this, "ID:" + ((TextView)view).getText(), Toast.LENGTH_SHORT).show();   }  });  setContentView(mMainLayout); }}

代碼結構:

Android多個連續帶數字圓圈,Android連續帶數字圓圈,Android帶數字圓圈

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 施甸县| 庆云县| 鹤岗市| 晋江市| 乡城县| 广宁县| 鸡西市| 常州市| 巴中市| 依兰县| 钦州市| 抚顺市| 长阳| 高雄市| 靖江市| 永新县| 广东省| 长宁区| 林西县| 澎湖县| 罗田县| 辛集市| 奉化市| 岳阳县| 崇文区| 潜山县| 开封县| 竹山县| 自治县| 宣化县| 东阿县| 赣州市| 乐昌市| 朝阳市| 乌审旗| 政和县| 鄯善县| 兰西县| 竹溪县| 邹城市| 黎平县|