Android 自定义控件之——画个老虎机来玩玩

小时候经常去镇上的游戏厅玩游戏,里面有很多赌游戏币的老虎机,当初也玩过,被坑了好多游戏币。现在有空,自己也画一个来玩玩。巩固一下自己在自定义控件 方面的知识,好了,不多废话了。效果图先走一波。

runing

图中的未注册是制作gif的时候,制图软件自己加上去的。另外就是右下角看起来像有点缺,这是卡顿造成的,真机上跑起来还是很流畅的。

写这个控件的时候首先要理清思路,先画什么,再画什么。当然这里就这么两种,肯定先画灰色的方块了。画好灰色的方块在考虑红色的怎么画。

画灰色方块

首先我建了一个类叫RuningView 继承View 代码如下

public class RuningView extends View {

    private Paint grayPaint;
    private Paint redPaint;
    private Paint textPaint;

    private static final int MAGIN = 10; //与边线的距离
    private static final int BORDER_LENGTH = 100;  // 边长
    private int verticalNumber = 0; //竖直方向的数量
    private int horizontalNumber = 0; //水平方向的数量
    private float horizontalSpacing = 0; //水平矩形间的间距
    private List<RectF> rectFList = new ArrayList<>();
    private int locationIndexFirst = 0;
    private int locationIndexSecond = -1;
    private int locationIndexThird = -2;

    private int sleepTime = 200;
    private int runTime = 10 * 5 * 200;
    private int currentTime = 0;
    private boolean isRuning = false;

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

    public RuningView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public RuningView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        grayPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        grayPaint.setStyle(Paint.Style.FILL);
        grayPaint.setColor(Color.GRAY);

        redPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        redPaint.setStyle(Paint.Style.FILL);
        redPaint.setColor(Color.RED);

        textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        textPaint.setStyle(Paint.Style.FILL);
        textPaint.setColor(Color.WHITE);
        textPaint.setTextSize(40);
    }

}

初始化了一些变量,至于这些变量有什么用,后面慢慢会用到。

首先,看看灰色矩形怎么画,画法多种多样,我这里当然只能说说我的思路。思路是整个边上的矩形分为4部分,即 上、下、左、右。每部分采用for循环依次画出。好了,问题又来了,坐标怎么确定?我怎么知道要循环多少次呢?这就是下面就是要计算的东西咯。

先把我的计算方法贴出来

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    int width = getWidth();
    int height = getHeight();
    int horizontalRectNumber = width / BORDER_LENGTH;//如果不考虑间距,这可以画这么多个矩形
    horizontalNumber=horizontalRectNumber-3; //这里用3个矩形的位置的空间来做矩形间的间距
    int horizontalRest = width - horizontalNumber * BORDER_LENGTH -2*MAGIN; //水平方向剩余的空间
    float horizontalSpac = (float) horizontalRest / (float) (horizontalNumber - 1);
    DecimalFormat df = new DecimalFormat("0.00");
    String format= df.format(horizontalSpac);
    horizontalSpacing=Float.valueOf(format);

    int verticalRectNumber = (int) ((hei
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值