0

我目前正在尝试在我的阵列适配器左侧绘制一个项目,但由于某种原因,它在消失前似乎只出现几帧。在ArrayAdapter中绘制自定义视图

下面是...

ArrowView

public class ArrowView extends View { 
    private Path path; 
    private Paint paint; 

    private void init() { 
     path = new Path(); 
     paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(ContextCompat.getColor(getContext(), R.color.white)); 
     paint.setStyle(Paint.Style.FILL); 
    } 

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

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     path.setFillType(Path.FillType.EVEN_ODD); 
     path.moveTo(0, 0); 
     path.lineTo(0, getHeight()); 
     path.lineTo(getWidth(), getHeight()/2); 
     path.lineTo(0, 0); 
     path.close(); 
     canvas.drawPath(path, paint); 
     Log.d("arroview", "onDraw called"); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    } 
} 

片段代码:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    ViewGroup rootView = (ViewGroup) inflater 
      .inflate(R.layout.fragment_first_use_get_started, container, false); 

    Button button = (Button) rootView.findViewById(R.id.leave_first_time_screen_button); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getActivity().finish(); 
     } 
    }); 

    ListView listView = (ListView) rootView.findViewById(R.id.get_started_list_view); 
    listView.setAdapter(new ArrayAdapter<>(getContext(), R.layout.adapter_get_started, R.id.get_start_description_text_view, functionalityStrings)); 
    listView.setDividerHeight(0); 
    listView.setEnabled(false); 

    return rootView; 
} 

最后,我的适配器布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <com.example.ArrowView 
     android:layout_width="0dp" 
     android:layout_weight=".25" 
     android:layout_height="match_parent" /> 

    <TextView 
     android:id="@+id/get_start_description_text_view" 
     android:layout_weight=".75" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

onDraw只被调用一次,并且在测试过程中有几次三角形以某种方式呈现(无法重现...)。我怀疑它必须与ArrayAdapter的工作方式一致?

谢谢!

回答

0

尝试增加

this.setWillNotDraw(false);´ 

在构造