最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android實現九宮格程序

 更新時間:2018年06月15日 11:02:06   作者:dr_abandon  
這篇文章主要為大家詳細介紹了android實現九宮格程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android九宮格展示的具體代碼,供大家參考,具體內容如下


(設置的有最少連幾個和最大連幾個)

MainActivity

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    NineView view = new NineView(this);
    setContentView(view);
    view.setOnPasswordFinishListener(new NineView.OnPasswordFinishListener() {
      @Override
      public void onPasswordFinish(String password) {
        Toast.makeText(getBaseContext(), "密碼:" + password, Toast.LENGTH_SHORT).show();
      }
    });
  }
}

NineView

public class NineView extends View {

  int width;
  Paint paintback = new Paint();
  Paint paintsrc = new Paint();
  int background;

  //保證是正方形

  int max = 6; //密碼的個數  6
  int min = 4;


  //點在哪里
  float currX, currY;

  public NineView(Context context) {
    super(context);
    init();
  }

  public NineView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
  }

  public void init() {
    paintback.setDither(true);
    paintback.setAntiAlias(true);
    paintsrc.setDither(true);
    paintsrc.setAntiAlias(true);
    //171625
    background = Color.rgb(0x17, 0x16, 0x25);
    paintback.setColor(background);
    //3791E6
    paintsrc.setColor(Color.rgb(0x37, 0x91, 0xe6));


  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    width = getWidth() / 4;

  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //清屏
    canvas.drawColor(background);
    //劃線
    if (result.size() > 0) {


      //點
      int x = result.get(result.size() - 1) % 3 + 1;
      int y = result.get(result.size() - 1) / 3 + 1;
      paintsrc.setStrokeWidth(10);
      canvas.drawLine(x * width, y * width, currX, currY, paintsrc);
      canvas.drawCircle(x * width, y * width, width / 3, paintback);
      if (result.size() > 1) {
        //防止越界
        for (int i = 0; i < result.size() - 1; i++) { // 1 2 3 <=2
          //需要取當前的i和下一個i
          //按住的前一個點
          int x1 = result.get(i) % 3 + 1;
          int y1 = result.get(i) / 3 + 1;
          //按住的后一個點
          int x2 = result.get(i + 1) % 3 + 1;
          int y2 = result.get(i + 1) / 3 + 1;
          paintsrc.setStrokeWidth(10);
          canvas.drawLine(x1 * width, y1 * width, x2 * width, y2 * width, paintsrc);
          canvas.drawCircle(x1 * width, y1 * width, width / 3, paintback);

        }
      }
    }
    paintsrc.setStrokeWidth(2);
    //9個圓
    paintsrc.setStyle(Paint.Style.STROKE);
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        canvas.drawCircle((i + 1) * width, (j + 1) * width, width / 3, paintsrc);
      }
    }
    paintsrc.setStyle(Paint.Style.FILL);
    for (Integer integer : result) {
      //i j ; // 8  2 2
      int j = integer / 3 + 1;
      int i = integer % 3 + 1;
      canvas.drawCircle(i * width, j * width, width / 8, paintsrc);
    }

  }

  //密碼
  List<Integer> result = new ArrayList<>();

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX();
    float y = event.getY();
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        //勾股定理
        int i = isConnPoint(x, y);
        //只要在園內
        if (i != -1) {
          result.add(i);
          currX = x;
          currY = y;
        }
        Log.e("TAG", "=====" + i);
        break;
      case MotionEvent.ACTION_MOVE:
        currX = x;
        currY = y;
        //移動到其他的圓中,那么接著去添加result
        int point = isConnPoint(x, y);
        if (point != -1 && !result.contains((Integer) point)) {
          result.add(point);
          if (result.size() > max) {
            //reslut清空
            if (onPasswordFinishListener != null)
              onPasswordFinishListener.onPasswordFinish(getPassword());
            result.clear();
          }
        }
        break;
      case MotionEvent.ACTION_UP:
        if (result.size() >= min) {
          if (onPasswordFinishListener != null)
            onPasswordFinishListener.onPasswordFinish(getPassword());
        }
        result.clear();
        break;
    }
    invalidate();
    return true;
  }

  public String getPassword() {
    String password = "";
    for (Integer integer : result) {
      password += integer + "";
    }
    return password;
  }


  //判斷
  public int isConnPoint(float x, float y) {
    //9  width,width width
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        if (pointOnCircle(x, y, (j + 1) * width, (i + 1) * width)) {
          return i * 3 + j; //0-8
        }
      }
    }
    return -1;
  }

  public boolean pointOnCircle(float x, float y, int cx, int cy) {//true
    Log.e("TAG", ((cx - x) * (cx - x) + (cy - y) * (cy - y)) + "");
    Log.e("TAG", ((float) width / 3f) * ((float) width / 3f) + "");
    float i = ((cx - x) * (cx - x) + (cy - y) * (cy - y));
    float j = ((float) width / 3f) * ((float) width / 3f);
    return i < j;
  }


  public void setOnPasswordFinishListener(OnPasswordFinishListener onPasswordFinishListener) {
    this.onPasswordFinishListener = onPasswordFinishListener;
  }

  private OnPasswordFinishListener onPasswordFinishListener;

  public interface OnPasswordFinishListener {
    void onPasswordFinish(String password);
  }

}

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

相關文章

  • Android實現自定義圓形進度條

    Android實現自定義圓形進度條

    這篇文章主要介紹了Android自定義圓形進度條實現代碼,進度條在Android中教程經常使用到,本文向大家分享了Android實現自定義圓形進度條的代碼,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android實現空心圓角矩形按鈕的實例代碼

    Android實現空心圓角矩形按鈕的實例代碼

    頁面上有時會用到背景為空心圓角矩形的Button,可以通過xml繪制出來。這篇文章主要介紹了Android實現空心圓角矩形按鈕的實例代碼,需要的朋友參考下吧
    2017-01-01
  • Android沉浸式狀態(tài)欄實現示例

    Android沉浸式狀態(tài)欄實現示例

    本篇文章主要介紹了Android沉浸式狀態(tài)欄實現示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android軟鍵盤顯示模式及打開和關閉方式(推薦)

    Android軟鍵盤顯示模式及打開和關閉方式(推薦)

    這篇文章主要介紹了Android軟鍵盤顯示模式及打開和關閉方式(推薦),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • Android實現自定義華麗的水波紋效果

    Android實現自定義華麗的水波紋效果

    關于Android的水波紋效果小編之前給大家也分享幾篇類似的,有興趣可通過下面的相關文章進行查看,今天給大家再分享一個華麗的水波紋效果,這個效果很不錯,感興趣的可以參考借鑒。
    2016-08-08
  • 詳解Andorid開發(fā)中反射機制是怎么一回事

    詳解Andorid開發(fā)中反射機制是怎么一回事

    反射機制是在運行狀態(tài)中,對于任何一個類,都可以知道這個類的所有屬性和方法,對于任何一個對象,都可以調用它所有的方法和屬性,修改部分類型信息,這種動態(tài)獲取信息以及動態(tài)調用對象方法的功能稱為Java的反射機制
    2022-11-11
  • Android中SwipeBack實現右滑返回效果

    Android中SwipeBack實現右滑返回效果

    這篇文章主要介紹了Android中SwipeBack實現右滑返回效果的相關資料,需要的朋友可以參考下
    2016-02-02
  • Android Studio 3.6安裝全過程及AVD安裝運行步驟詳解

    Android Studio 3.6安裝全過程及AVD安裝運行步驟詳解

    這篇文章主要介紹了Android Studio 3.6安裝全過程及AVD安裝運行步驟詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 探討:如何修改Android超時休眠時間

    探討:如何修改Android超時休眠時間

    本篇文章是對如何修改Android超時休眠時間的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Android 個人理財工具五:顯示賬單明細 上

    Android 個人理財工具五:顯示賬單明細 上

    本文主要介紹 Android 個人理財工具顯示賬單明細,這里提供了示例代碼,和實現效果圖,幫助大家學習理解ListView的用法,有興趣的小伙伴可以參考下
    2016-08-08

最新評論

连平县| 高州市| 德格县| 华安县| 武胜县| 寻乌县| 建湖县| 天祝| 浑源县| 江华| 卢湾区| 酒泉市| 景德镇市| 盐津县| 江永县| 临漳县| 威海市| 霸州市| 怀化市| 屏东县| 鄂伦春自治旗| 新宾| 辽阳市| 建始县| 古丈县| 武乡县| 揭阳市| 凌云县| 横山县| 徐水县| 汾阳市| 勃利县| 白玉县| 靖安县| 湖南省| 广昌县| 启东市| 图片| 武隆县| 恩施市| 湖州市|