Android:如何使用onDraw()函数在一个视图中绘制一个圆圈和一个按钮

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:如何使用onDraw()函数在一个视图中绘制一个圆圈和一个按钮相关的知识,希望对你有一定的参考价值。

现在我有xml来设置视图我有一个View和on button.Now使用onDraw()函数我只是绘制ColorDotView但我无法绘制按钮。

<?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.chg.colordotview2_button.ColorDotView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/dotView"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/button"/>
</LinearLayout>

这是我的View Setting类

public class ColorDotView extends View {

    int count = 0;

    public ColorDotView(Context context) {
        super(context);
    }
    // Constructor required for inflation from resource file
    public ColorDotView(Context context, AttributeSet ats, int defaultStyle)

    {
        super(context, ats, defaultStyle );
    }
    //Constructor required for inflation from resource file
    public ColorDotView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
        return true; // Return true if the event was handled.
    }
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent keyEvent) {
        return true; // Return true if the event was handled.
    }
    @Override
    public boolean onTrackballEvent(MotionEvent event ) {
        // Get the type of action this event represents
        int actionPerformed = event.getAction();
        return true; // Return true if the event was handled.
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Get the type of action this event represents
        invalidate();
        return true; // Return true if the event was handled.
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);  // background color
        Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  

        if (count%8==0|count%8==1){
            mPaint.setColor(Color.RED); } // circle color
        if (count%8==2|count%8==3) {
            mPaint.setColor(Color.BLUE);  // circle color
        }
        if (count%8==4|count%8==5){
            mPaint.setColor(Color.GREEN); } // circle color
        if (count%8==6|count%8==7) {
            mPaint.setColor(Color.YELLOW);  // circle color
        }

        ++count;

        //canvas.drawCircle(cx, cy,radios,paint);
        canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, 
                         canvas.getWidth() / 4, mPaint);
    }
}

这是我的MainActivity.class

public class MainActivity extends AppCompatActivity {

    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new ColorDotView(this));  
    }
}

我想在视图中再添加一个按钮并使用按钮来控制颜色变化(现在我可以使用屏幕来改变颜色)

提前致谢!

答案

因为没有人回答这个问题。所以我会在这里添加我的方法。

public class MainActivity extends AppCompatActivity {

    Button button;
    ColorDotView colorDotView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        BaseView_ColorButton cet = new BaseView_ColorButton(this);
        setContentView(cet);

        button = (Button) findViewById(R.id.button);
        colorDotView = (ColorDotView) findViewById(R.id.dotView);

        button.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {

                colorDotView.invalidate();


            }
        });
    }
}

这是MainActivity功能。最重要的是我们应该调用invalidate()函数来强制Canvas在我们单击Button时绘制新图片

以上是关于Android:如何使用onDraw()函数在一个视图中绘制一个圆圈和一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

Android 如何在 Canvas 的 onDraw 方法中创建 onClick 事件

Android 更新视图函数ondraw() 和dispatchdraw()的区别

activex 如何调用OnDraw函数

在 Android 上的 onDraw 之外更新视图的画布

VC对话框怎么添加ondraw函数

Android 自定义 view—— onDraw