真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

自定義View繪制圖像與移動(dòng)字體

自定義View在開發(fā)中是經(jīng)常遇到的,例如一個(gè)×××燈的效果、或者自定義一個(gè)轉(zhuǎn)盤來顯示下載進(jìn)度的百分百比。今天把實(shí)現(xiàn)方式寫下來,下面是源碼部分:

為淮安等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及淮安網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、做網(wǎng)站、淮安網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

MainActivity:沒變動(dòng)

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

主布局:只增加了一個(gè)自定義View



    
    

自定義View:

import java.util.Random;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;

public class MineView extends View {

    /**
     * 字體移動(dòng)的X坐標(biāo)
     */
    private int rx = 0;
    /**
     * 畫筆工具
     */
    private Paint paint;
    /**
     * 創(chuàng)建線程對(duì)象,用于循環(huán)延遲執(zhí)行命令
     */
    private MyThread t;
    /**
     * 0表示圓的left,60表示圓的top,100表示圓的right,160表示圓的bottom
     */
    private RectF rectF = new RectF(0, 60, 100, 160);
    /**
     * 表示區(qū)間角度
     */
    private float sweepAngle;
    /**
     * 創(chuàng)建隨機(jī)數(shù)對(duì)象
     */
    private Random random;
    /**
     * isdestroy表示該Activity是否已經(jīng)結(jié)束
     */
    private boolean isdestroy = false;

    public MineView(Context context, AttributeSet attrs) {
        super(context, attrs);
        System.out.println("構(gòu)造器");
        paint = new Paint();
        random = new Random();
        //抗鋸齒,否則圖像會(huì)很難看
        paint.setAntiAlias(true);
        if (t == null) {
            t = new MyThread();
            t.start();
        }
    }

    public MineView(Context context) {
        super(context);
        System.out.println("構(gòu)造器");
        paint = new Paint();
        paint.setAntiAlias(true);
        if (t == null) {
            t = new MyThread();
            t.start();
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setTextSize(30);
        // rx表示移動(dòng)字體的x坐標(biāo)
        canvas.drawText("移動(dòng)字體", rx, 30, paint);
        // rectF表示圓的對(duì)象,0表示起始角度,sweepAngle表示區(qū)間角度,true和false表示繪制過程的方式,paint表示畫筆對(duì)象
        canvas.drawArc(rectF, 0, sweepAngle, true, paint);
    }

    class MyThread extends Thread {
        @Override
        public void run() {
            super.run();
            while (true) {
                rx += 5;
                // 如果字體移動(dòng)出屏幕以外,就讓字體從頭開始
                if (rx > getWidth()) {
                    rx = (int) (0 - paint.measureText("移動(dòng)字體"));
                }

                sweepAngle += 5;
                // 如果角度大于360就讓圓從0度開始重新繪制
                if (sweepAngle > 360) {
                    sweepAngle = 0;
                }
                // 讓顏色從0-255隨機(jī)選擇
                int r = random.nextInt(256);
                int g = random.nextInt(256);
                int b = random.nextInt(256);
                // 分別表示:透明度(0~255)、紅、綠、藍(lán)
                paint.setARGB(255, r, g, b);
                /**
                 * 判斷Activity是否已經(jīng)退出,如果退出則isdestroy為true,那么立刻讓線程對(duì)象與畫筆對(duì)象為空,并且break,
                 * 否則會(huì)造成內(nèi)存溢出,此辦法必須在此處使用,否則會(huì)造成空指針的BUG。
                 */
                if (isdestroy) {
                    if (t != null) {
                        t = null;
                    }
                    if (paint != null) {
                        paint = null;
                    }
                    break;
                }
                // 睡眠
                SystemClock.sleep(50);
                // 可以讓ondraw方法重新執(zhí)行
                postInvalidate();
                // invalidate();分線程無效,要在主線程使用
            }
        }
    }

    /**
     * 當(dāng)窗口銷毀的時(shí)候會(huì)調(diào)用此方法,用于關(guān)閉資源
     */
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        isdestroy = true;
        System.out.println("onDetachedFromWindow");

    }

}

運(yùn)行效果:運(yùn)行起來是動(dòng)態(tài)的,我不會(huì)上傳動(dòng)態(tài)效果,想看效果的自己跑起來就可以了。

自定義View繪制圖像與移動(dòng)字體

注意:這里的×××燈效果只是一種非常笨的方式,有更簡(jiǎn)單的辦法,我以后會(huì)介紹!


分享文章:自定義View繪制圖像與移動(dòng)字體
網(wǎng)站地址:http://weahome.cn/article/goiohc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部