Android 向下和向上滚动时,循环视图(项目中的自定义视图)将消失
当我向下和向上滚动自定义视图时,自定义视图会消失,这是我通过编程创建并添加到项目容器(RelativeLayout)中的问题。它构建成功 但是在滚动之后,我在同一个项目中得到了这个结果-一个空容器 自定义视图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
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
insideonBindViewHolder
-在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);}}