[Android界面] 新手求助:自定义控件重复显示问题

定义了一个倒计时的控件,初始显示为“开始”,点击后从10开始倒计时,一直到0。可是在控件上会额外显示一个文本,如下图
图片说明

额外显示的文本也会在点击开始后倒计时,找了好久一直没发现问题所在。所以请教一下各位大神。

其中自定义控件代码如下:

 public class CustomView_A7 extends TextView{

    private Paint paint = new Paint();
    private Rect rect = new Rect();
    private int mBackgroundColor= ContextCompat.getColor(getContext(), R.color.colorPrimary);
    private int mTextColor = Color.WHITE;

    public CustomView_A7(Context context) {
        super(context);
    }

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

    public CustomView_A7(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //画圆
        paint.setColor(mBackgroundColor);
        canvas.drawCircle(getWidth()/2, getWidth()/2, getWidth()/2, paint);
        //画数字
        paint.setColor(mTextColor);
        paint.setTextSize(240);
        String text = (String)this.getText();
        paint.getTextBounds(text, 0, text.length(), rect);
        int textWidth = rect.width();
        int textHeight = rect.height();
        canvas.drawText(text, getWidth()/2 - textWidth/2, getWidth()/2 + textHeight/2, paint);
    }
}

Layout中只有一个自定义控件:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.administrator.androidstudyapp.CustomView_A7
        android:layout_width="240dp"
        android:layout_height="240dp"
        android:layout_gravity="center"
        android:layout_margin="@dimen/activity_vertical_margin"
        android:id="@+id/customView_A7"/>

</LinearLayout>

难道是Activity中的问题吗,还麻烦各位帮帮忙:

 public class Point_A7_Activity extends AppCompatActivity{

    private CustomView_A7 mCustomViewA7;
    private int value = 10000;    //10秒

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 8888:
                    int value = (int) msg.obj;
                    mCustomViewA7.setText(String.valueOf(value/1000f));
                    if(value > 0){
                        Message message = handler.obtainMessage();
                        message.arg1 = 1;
                        message.arg2 = 2;
                        message.what = 8888;
                        message.obj = value - 100;
                        sendMessageDelayed(message, 100);
                    }
                    break;
            }
        }
    };

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

        mCustomViewA7 = (CustomView_A7) findViewById(R.id.customView_A7);
        mCustomViewA7.setText("开始");
        mCustomViewA7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Message message = handler.obtainMessage();
                //不要使用Message message =  new Message();
                message.arg1 = 1;
                message.arg2 = 2;
                message.what = 8888;
                message.obj = value ;
                handler.sendMessageDelayed(message, 100);
            }
        });
    }
}

3个回答

亲,你把super.onDraw(canvas)注释掉试试。

great999xiao
昵称什么的很麻烦的说 注释掉的确好了,非常感谢啊,送你一朵小红花~~~能请问下具体原因或者理由吗,不胜感激
接近 3 年之前 回复

String text = (String)this.getText();
paint.getTextBounds(text, 0, text.length(), rect);
int textWidth = rect.width();
int textHeight = rect.height();
这一块,我觉得有问题,

    你可以看        http://blog.csdn.net/baidu_31093133/article/details/52413893
great999xiao
昵称什么的很麻烦的说 这里没问题,一楼是正解
接近 3 年之前 回复
great999xiao
昵称什么的很麻烦的说 这里没问题,一楼是正解
接近 3 年之前 回复

把 mCustomViewA7.setText("开始")在代码中去掉,即可

great999xiao
昵称什么的很麻烦的说 这里没问题,一楼是正解
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!