如何在xml布局上使用onDraw()?无效而不刷新onDraw()函数

时间:2018-05-10 09:30:44

标签: android xml android-layout android-custom-view

我一直试图在地图上绘制圆圈作为玩家位置,但我想使用XML来布局布局周围的其他东西,例如按钮,将地图作为背景。但是我似乎无法让两件事情协同工作。如果我使用自定义视图类作为setContentView,它们可以完美地分离并且内容被绘制得很好。但是,如果我在xml中使用customview,onDraw()函数只在启动时经历一次,并且不能无效()' d。

这是布局XML:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TrackMap">
<com.b143lul.android.logreg.CircleView android:id="@+id/CircleView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/resized_track_2"
    ></com.b143lul.android.logreg.CircleView>

我在自定义视图中的代码是:

public class CircleView extends View {
    SharedPreferences sharedPreferences;
    JSONObject groupScores;
    Paint paint1;
    String localUsername = "";
    public CircleView(Context context) {
        super(context);
        init(context);
    }
    public CircleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }
    public void init(Context context) {
        paint1 = new Paint();
        paint1.setColor(Color.BLUE);
        this.setWillNotDraw(false);
    }
    protected void onDraw(Canvas canvas) {
        // Bunch of circle drawing.
    }

    public void update(JSONObject allGroupScores, String username) {
        groupScores = allGroupScores;
        localUsername = username;
        invalidate();
        // Invalidate being used to refresh the draw function
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
    }

至于我如何实现自定义视图,我从onCreate()开始:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    circleView = new CircleView(this);
    //setContentView(circleView);
    setContentView(R.layout.activity_track_map);

然后在每隔5秒获得分数的StringRequest之后调用customview类的更新函数(这完全可以正常工作):

try {
        groupScores = new JSONObject(response);
        circleView.update(groupScores, username);

所以,我只是想知道如何同时使用它们,以便绘图覆盖XML。可悲的是,我似乎无法在网上找到任何东西,我很抱歉,如果它真的很蠢,我没有做到!提前致谢! :)

提到:正在访问update()函数,但invalidate()没有使onDraw()刷新。如果该视图用作setContentView(),则会运行此命令。

0 个答案:

没有答案