0

Je suis actuellement en train d'essayer de dessiner un élément sur la gauche sur mon adaptateur de tableau mais pour une raison quelconque, il semble apparaître seulement pour quelques images avant de disparaître.Dessin d'une vue personnalisée dans un ArrayAdapter

est ici le code pour ...

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

Mon fragment:

@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; 
} 

Et enfin, ma mise en page de l'adaptateur:

<?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> 

L'onDraw est appelée une seule fois, et plusieurs fois au cours de mes tests, les triangles ont été restitués (ne peuvent pas être reproduits ...). Je soupçonne qu'il doit doter de la façon dont le ArrayAdapter fonctionne?

Merci!

Répondre

0

Essayez d'ajouter

this.setWillNotDraw(false);´ 

dans le constructeur