Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将自定义视图添加为XML布局视图_Android_Android Layout_Surfaceview - Fatal编程技术网

Android 将自定义视图添加为XML布局视图

Android 将自定义视图添加为XML布局视图,android,android-layout,surfaceview,Android,Android Layout,Surfaceview,情况如下: 我有一个活动RunTrainingWorkoutsView,它使用XML布局_run _workout.XML u和一些由倒计时更新的标签。工作很好 现在,除了通过CountDownTimer对象的onTick()回调方法每秒更新的标签外,我想在我的_run_count.xml布局中添加一个自定义曲面视图,它将绘制一些每秒通过相同onTick()方法更新的圆弧 my run_workout.xml: <training.timer.CounterClockView a

情况如下:

我有一个活动RunTrainingWorkoutsView,它使用XML布局_run _workout.XML u和一些由倒计时更新的标签。工作很好

现在,除了通过CountDownTimer对象的onTick()回调方法每秒更新的标签外,我想在我的_run_count.xml布局中添加一个自定义曲面视图,它将绘制一些每秒通过相同onTick()方法更新的圆弧

my run_workout.xml:

<training.timer.CounterClockView 
    android:id="@+id/counter_clock_surface"
    android:layout_width="300dp" 
    android:layout_height="240dp">
</training.timer.CounterClockView>
我扩展活动的主要类是使用以下代码获取对布局中自定义surfaceView的引用:

//counterClockView  is declared outside of onCreate() as CounterClockView counterClockView;  

//later in onCreate(){....
counterClockView  = (CounterClockView) findViewById(R.id.counter_clock_surface);
问题是更改customView对象(逆时针视图)的成员变量的值

将使应用程序崩溃

另外,在我的主要活动中,我想在更改counterArcAngle值后调用invalidate()方法来重做曲面视图,但这也会导致应用程序崩溃

为什么不能创建反锁视图对象并将其引用到同一类型的xml布局元素,并更改其外观、使其无效等等

编辑日志:


我是在三天的时间里用头撞墙,用谷歌搜索,等等方式弄到的

事实上,就是这个愚蠢的小东西

我的XML文件,其中我定义了包含一些常用android视图(即textView和按钮)的布局,以及我的自定义视图反时针视图:


在那里我不得不多加一行

<training.timer.CounterClockView 
    xmlns:android="http://schemas.android.com/apk/res/android"   !!!
    android:id="@+id/counter_clock_surface"
    android:layout_width="300dp" 
    android:layout_height="240dp">
</training.timer.CounterClockView>

我不知道为什么这个名称空间行有这么大的不同,但它工作得很好

现在,我可以在CountDownTimer()的每个onTick()上从我的主活动更新我的自定义视图

以下答案非常有用:

我是在头撞墙三天后,通过谷歌搜索等方式得到的

事实上,就是这个愚蠢的小东西

我的XML文件,其中我定义了包含一些常用android视图(即textView和按钮)的布局,以及我的自定义视图反时针视图:


在那里我不得不多加一行

<training.timer.CounterClockView 
    xmlns:android="http://schemas.android.com/apk/res/android"   !!!
    android:id="@+id/counter_clock_surface"
    android:layout_width="300dp" 
    android:layout_height="240dp">
</training.timer.CounterClockView>

我不知道为什么这个名称空间行有这么大的不同,但它工作得很好

现在,我可以在CountDownTimer()的每个onTick()上从我的主活动更新我的自定义视图

以下答案非常有用:
也有同样的问题,所以我只是在自定义视图的Java类中实现了所有三个构造函数——所有三个构造函数加上onDrow方法,它工作起来很有魅力。试试看

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class CustomWorldWideView extends View {

    public CustomWorldWideView(Context context) {

        super(context);
    }

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

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

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //Some simple draw on the view...
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.parseColor("#FFA800"));


        Path path = new Path();

        path.moveTo(0, 0);
        path.lineTo(getWidth() / 2, 0);
        path.lineTo(getWidth(), getHeight()/2);
        path.lineTo(getWidth() / 2, getHeight());
        path.lineTo( 0, getHeight());
        path.lineTo( 0, 0);

        canvas.drawPath(path, paint);


    }
}
XML:

        <PackageName.CustomWorldWideView
            android:layout_width="56.00dp"
            android:layout_height="43dp"
            android:id="@+id/world_wide_grid_view_2"
            />

也有同样的问题,所以我只是在自定义视图的Java类中实现了所有三个构造函数——所有三个构造函数加上onDrow方法,它的工作非常出色。试试看

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class CustomWorldWideView extends View {

    public CustomWorldWideView(Context context) {

        super(context);
    }

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

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

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //Some simple draw on the view...
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.parseColor("#FFA800"));


        Path path = new Path();

        path.moveTo(0, 0);
        path.lineTo(getWidth() / 2, 0);
        path.lineTo(getWidth(), getHeight()/2);
        path.lineTo(getWidth() / 2, getHeight());
        path.lineTo( 0, getHeight());
        path.lineTo( 0, 0);

        canvas.drawPath(path, paint);


    }
}
XML:

        <PackageName.CustomWorldWideView
            android:layout_width="56.00dp"
            android:layout_height="43dp"
            android:id="@+id/world_wide_grid_view_2"
            />


错误日志是什么?读取
LogCat
RunTrainingWorkoutsView.onCreate()
在此方法中,此文件
RunTrainingWorkoutsView.java
的第72行的输出,其中一个对象为
NULL
。过来看!这就是问题所在。。。如果我有:TextView txt=(TextView)findViewById(…),它就不会为NULL,所以问题是为什么我的自定义视图(surfaceView)为NULL???错误日志是什么?读取
LogCat
RunTrainingWorkoutsView.onCreate()
在此方法中,此文件
RunTrainingWorkoutsView.java
的第72行的输出,其中一个对象为
NULL
。过来看!这就是问题所在。。。如果我有:TextView txt=(TextView)findViewById(…),它就不会为NULL,所以问题是为什么我的自定义视图(surfaceView)为NULL???
        <PackageName.CustomWorldWideView
            android:layout_width="56.00dp"
            android:layout_height="43dp"
            android:id="@+id/world_wide_grid_view_2"
            />