<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 1. 前言 本篇文章中將簡單講解下什么事離屏繪制。在Android中簡要來說也就是將要繪制的內容單獨繪制在緩沖層,而在Android中提供了canvas.saveLayer方法來保存當前圖層作為離屏緩沖,在繪制完畢后可以使用canvas.restoreToCount(saveId)或者canvas.restore();來恢復之前的圖層。這是什么意思呢?不妨來做一個簡單的小實驗: 比如,我這里的需求為繪制兩個圓,并且讓兩個圓分開間隔20dp,水平對齊。當然,這里不直接產生兩個已經滿足條件的圓,而是使用這里的離屏繪制,也就是新增一個圖層。假定兩個圓的位置如下: ![](https://img.kancloud.cn/c5/ed/c5edb44a6db8108292e6b7b260704541_518x334.png) 對應代碼: ~~~ private lateinit var mOtherPaint: Paint private lateinit var mPaint: Paint // 圓中心和半徑 private var mCx = 300 private var mCy = 300 private var mRadius = 100 private fun init(){ mPaint = Paint() mPaint.isAntiAlias = true mPaint.color = Color.RED mPaint.isDither = true mPaint.strokeWidth = 5f mPaint.style = Paint.Style.FILL mOtherPaint = Paint() mOtherPaint.isAntiAlias = true mOtherPaint.color = Color.BLUE mOtherPaint.isDither = true mOtherPaint.strokeWidth = 5f mOtherPaint.style = Paint.Style.FILL } override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) canvas?.apply { // 只有一個圖層情況 drawCircle(mCx.toFloat(), mCy.toFloat(), mRadius.toFloat(), mPaint) drawCircle(mCx.toFloat() + 50, mCy.toFloat() + 50, mRadius.toFloat(), mOtherPaint) } } ~~~ 如果只有一個圖層,那么我們就需要修改兩個圓的坐標位置。這里我們使用新建一個圖層的方式。也就是: ~~~ override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) canvas?.apply { // 只有一個圖層情況 drawCircle(mCx.toFloat(), mCy.toFloat(), mRadius.toFloat(), mPaint) // 存儲當前圖層 val saveLayerId = saveLayer(0f, 0f, width.toFloat(), height.toFloat(), mPaint) // 移動畫布 translate((20 + mRadius * 2).toFloat(), 0f) drawCircle(mCx.toFloat(), mCy.toFloat(), mRadius.toFloat(), mOtherPaint) // 恢復之前圖層 restoreToCount(saveLayerId) } } ~~~ 結果: ![](https://img.kancloud.cn/6e/ce/6ece7eab38a0b5b57790afce682e81ad_209x106.png) 從結果中可以看出,其實這里可以理解為創建了一個新的圖層,然后可以對新圖層進行簡單平移操作,然后繪制對應的圖層內容,繼而最終在上一個圖層恢復的時候可以將多個(兩個)圖層合并。 # 2. 其他 View.setLayerType()直接把整個View都繪制在離屏緩沖中 ```java //使用一個Bitmap來緩沖,通常也就是設置禁用硬件加速 setLayerType(LAYER_TYPE_SOFTWARE, null); //使用GPU來緩沖 setLayerType(LAYER_TYPE_HARDWARE, null); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看