Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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 向下和向上滚动时,循环视图(项目中的自定义视图)将消失_Android_Android Custom View_Android Recyclerview - Fatal编程技术网

Android 向下和向上滚动时,循环视图(项目中的自定义视图)将消失

Android 向下和向上滚动时,循环视图(项目中的自定义视图)将消失,android,android-custom-view,android-recyclerview,Android,Android Custom View,Android Recyclerview,当我向下和向上滚动自定义视图时,自定义视图会消失,这是我通过编程创建并添加到项目容器(RelativeLayout)中的问题。它构建成功 但是在滚动之后,我在同一个项目中得到了这个结果-一个空容器 自定义视图 public class WaveFormView extends View { Paint p; Paint pTop; Paint pBottom; Rect rect; Rect rect1; int [] amplitudeArray; int amplitudeArraySize

当我向下和向上滚动自定义视图时,自定义视图会消失,这是我通过编程创建并添加到项目容器(RelativeLayout)中的问题。它构建成功

但是在滚动之后,我在同一个项目中得到了这个结果-一个空容器

自定义视图

public class WaveFormView extends View {
Paint p;
Paint pTop;
Paint pBottom;
Rect rect;
Rect rect1;
int [] amplitudeArray;
int amplitudeArraySize;
int leftPointX;
int rightPointX;
int index;

boolean isPlay;

public static final int MAX_AMPLITUDE = 32;//was 1000
public static final int SIZE_OF_BAR_WAVE_FORM = 98;
public static final int BAR_SIZE_AND_INTERVAL = 5;


private static final float screenDensity = Utils.getDisplayDensity();

public WaveFormView(Context context, int [] amplitudeArray, boolean isPlay, int index) {
    super(context);
    p = new Paint();
    p.setColor(getResources().getColor(R.color.color_wave_from_grey));

    pTop = new Paint();
    pTop.setColor(getResources().getColor(R.color.color_wave_form_play_top));

    pBottom = new Paint();
    pBottom.setColor(getResources().getColor(R.color.color_wave_form_play_bottom));

    this.amplitudeArray = amplitudeArray;
    amplitudeArraySize = amplitudeArray.length;
    this.isPlay = isPlay;
    this.index = index;
}

@Override
protected void onDraw(Canvas canvas) {
    if(!isPlay){
        buildWaveForm(canvas);
    }
    else{
        buildWaveFormWhenPlay(canvas);
    }

}

private void buildWaveForm(Canvas canvas){

    int oneDp = (int) (1*screenDensity);
    int fourDp = (int) (4*screenDensity);
    int amplitudeDp = 0;
    int startBottomY = (int) (MAX_AMPLITUDE*screenDensity) + oneDp;
    p.setColor(getResources().getColor(R.color.color_wave_from_grey));
    for (int i = 0; i < amplitudeArraySize; i++){
        p.setStyle(Paint.Style.FILL_AND_STROKE);
        leftPointX += oneDp;
        rightPointX = leftPointX+fourDp;
        amplitudeDp  = (int) (amplitudeArray[i]*screenDensity);
        rect = new Rect(leftPointX, startBottomY, rightPointX, startBottomY + amplitudeDp);
        rect1 = new Rect(leftPointX, startBottomY-oneDp-amplitudeDp, rightPointX, startBottomY-oneDp);
        canvas.drawRect(rect, p);
        canvas.drawRect(rect1, p);
        leftPointX+=fourDp;
    }
}

private void buildWaveFormWhenPlay(Canvas canvas){
  ...}

谢谢你的回答

这种奇怪行为的原因在于,在buildWaveForm方法中,这些参数:leftPointX和rightPointX的after运算符没有归零。如果您在运算符for之后为它们设置零,则方法buildWaveForm可以准确地工作。

请添加适配器和自定义视图的代码。不要调用
addView
inside
onBindViewHolder
-在
onCreateViewHolder
中创建项目时这样做是指在Holder中调用addView吗?
public class PostTimeLineAdapter extends   
RecyclerView.Adapter<PostTimeLineHolder>   ... 
@Override
public void onBindViewHolder(final PostTimeLineHolder holder, final int position) { ...
holder.homeItemContainerWaveForm.addView(new       WaveFormView(context,bufferArray, false, -1));...}
public class PostTimeLineHolder extends RecyclerView.ViewHolder {

...
public RelativeLayout homeItemContainerWaveForm;


public PostTimeLineHolder(View itemView) {
    super(itemView);
    ...
    this.homeItemContainerWaveForm = (RelativeLayout) itemView.findViewById(R.id.home_item_sound_container_wave_forms);}}