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);´ 

в конструкторе