小编Tho*_*mas的帖子

在android上创建一个三态复选框

我遇到了一个大问题:我想在android上制作三个状态复选框.它是带有复选框的ListView上的复选框.它应该允许用户在三种状态之间切换:

  • 全部检查过
  • 没人检查过
  • misc检查

并且可选择在变化时保持misc状态.

如果我是对的,我应该创建CompoundButton类的子类并实现boolean mchecked的int mstate intead.然后我应该覆盖事件监听器,保存状态的函数,以及状态getter和setter.

我的问题基本上是如何实现的?如何在可绘制状态之间切换?(我已经在xml中实现了middle_state)以及如何正确实现事件处理程序?

这是我开始实施的:

public class TriStateCheckBox extends CompoundButton{
    private int state;

    public TriStateCheckBox(Context context) {
        super(context);
    }
    public static interface onCheckChangedListener{
        void onCheckChanged(TriStateCheckBox view, int state);
    }

    public void onCheckChanged(TriStateCheckBox view, int state){
        this.state = state;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是股票CompoundButton的代码:

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the …
Run Code Online (Sandbox Code Playgroud)

java checkbox android

17
推荐指数
3
解决办法
7967
查看次数

自定义SurfaceView上的ClassCastException

几天后我遇到了一个大问题:当我尝试在布局和我的自定义surfaceview上绑定surfaceview时,我从自定义surfaceview获得了ClassCastException.

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     waveform =(WaveFormView) findViewById(R.id.surfaceView1);
}
class WaveFormView extends SurfaceView implements SurfaceHolder.Callback {        
    public WaveFormView(Context context, AttributeSet attrs) {
        super(context, attrs);
        getHolder().addCallback(this);
        _dthread = new DrawingThread(getHolder(), this);
        setFocusable(true);
        paintP.setStyle(Paint.Style.STROKE);
        paintP.setStrokeWidth(1);
        paintP.setColor(Color.WHITE);
        paintT.setStyle(Paint.Style.STROKE);
        paintT.setStrokeWidth(1);
        paintT.setColor(Color.WHITE);
    }

    @Override
    public void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);
        for (int i=0;i<_athread.buffer.length-pas;i+=pas){
            canvas.drawLine(i, 150-_athread.buffer[i], i+pas, 150-_athread.buffer[i+pas], paintP);
        }
        canvas.drawText("FPS:  " + String.valueOf(FPS), 0, 10, paintT);
        //canvas.drawText("tmp:  " + tmp, 0, 20, paintT);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, …
Run Code Online (Sandbox Code Playgroud)

android classcastexception surfaceview

1
推荐指数
1
解决办法
1936
查看次数