2014-10-27 1 views
0

Итак, я искал ответ на вопрос или возможное решение этой проблемы в течение пары недель и до сих пор не получил дальнейшего распространения. Я работаю над созданием приложения, которое вознаграждает пользователей точками после определенных вещей. Одна из страниц, которую они могут посетить, - это лидирующая доска, основанная на друзьях пользователей. Я могу внедрить плату лидеров и печатать пользователей в порядке, основанном на их точках, но не может реализовать стиль стиля гистограммы. Как так: http://imgur.com/tF51RsA (Если бы разместить ссылку, потому что я не могу вставить картинку в здесь)Изменение ширины отдельных элементов в виде списка

Вот что я пытался до сих пор: 1. Добавление в XML и пытается getLayoutParams в обычае затем установите ширину, которая не сработала. 2. используя onDraw, чтобы нарисовать прямоугольник над верхней частью элемента списка.

Вот мой Leader совет XML-файл (или близкий к нему):

<LinearLayout 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ListView 
     android:id="@+id/leader_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="left|top" 
     android:background="#00000000"> 

</LinearLayout> 

Моя ListView строка XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/frame" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <RelativeLayout 
     android:id="@+id/bottom" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:id="@+id/user_image" 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:layout_centerVertical="true" 
      android:background="@drawable/ic_default_user"/> 

     <TextView 
      android:id="@+id/rank" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:paddingLeft="10dp" 
      android:layout_toRightOf="@+id/user_image"/> 

     <TextView 
      android:id="@+id/user_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:paddingLeft="20dp" 
      android:textSize="16sp" 
      android:layout_toRightOf="@+id/rank"/> 

     <TextView 
      android:id="@+id/score" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" 
      android:layout_toRightOf="@+id/user_name" 
      android:gravity="right" 
      android:paddingRight="15dp"/> 

    </RelativeLayout> 

</FrameLayout> 

и мой обычай ArrayAdapter в моем классе таблице лидеров

public class LeaderAdapter extends ArrayAdapter<LeaderboardDM>{ 
    ArrayList<LeaderboardDM> leaders; 
    int layoutResourceId; 

    public LeaderAdapter(Context context, int layoutResourceId, ArrayList<LeaderboardDM> leaders){ 
     super(context, layoutResourceId, leaders); 
     this.leaders = new ArrayList<LeaderboardDM>(); 
     this.leaders = leaders; 
     this.layoutResourceId = layoutResourceId; 
    } 

    public View getView(int position, View convertView, ViewGroup parent){ 
     View v = convertView; 
     ViewHolder viewHolder = null; 
     if(v == null){ 
      v = getLayoutInflater().inflate(layoutResourceId, null, false); 
      viewHolder = new ViewHolder(); 
      viewHolder.userImage = (ImageView) v.findViewById(R.id.user_image); 
      viewHolder.rank = (TextView) v.findViewById(R.id.rank); 
      viewHolder.userName = (TextView) v.findViewById(R.id.user_name); 
      viewHolder.score = (TextView) v.findViewById(R.id.score); 
      v.setTag(viewHolder); 
     }else{ 
      viewHolder = (ViewHolder) v.getTag(); 
     } 
     LeaderboardDM lead = leaders.get(position); 
     if(lead != null){ 
      //doesn't set user image yet 
      viewHolder.userName.setText(lead.user); 
      viewHolder.score.setText(String.valueOf(lead.points)); 
      viewHolder.rank.setText("#"+String.valueOf(position+1)); 

     } 
     return v; 
    } 
    class ViewHolder{ 
     ImageView userImage; 
     TextView rank, userName, score; 

    } 
} 

и руководителемDM класс

public class LeaderboardDM{ 
    public String user; 
    public int points; 
    public String profilePicUrl; 

    public void setUserName(String user){ 
     this.user = user; 
    } 
    public String getUserName(){ 
     return user; 
    } 
    public void setPoints(int points){ 
     this.points = points; 
    } 
    public int getPoints(){ 
     return points; 
    } 
    public void setProfilePic(String url){ 
     this.profilePicUrl = url; 
    } 
    public String getProfilePicUrl(){ 
     return profilePicUrl; 
    } 
} 

Список сортируется с использованием компаратора и снова распечатывается в порядке их оценки. Если у кого-то есть идея о том, как создать что-то вроде этого, пожалуйста, помогите мне указать в правильном направлении.

Спасибо!

Редактировать: Благодаря @Ridcully я смог решить эту проблему. Решение отлично подходит для всех, кто в будущем может это сделать, заключается в создании пользовательского индикатора выполнения и извлечении ресурса из ресурсов, а затем установите ProgressDrawable на этот ресурс. Оттуда я бы установил ширину с помощью setProgress (int width).

+0

Поскольку свойства вашего LeaderboardDM являются общедоступными, вы можете потерять получатели и сеттеры и получить к ним доступ напрямую. – Ridcully

ответ

1

Вы можете использовать RelativeLayout и поставить ProgressBar (с индивидуальным выводом) в спину. Таким образом, вы можете установить ширину полосы простым setProgress().

+0

Это работает отлично! спасибо, Реализован он, выполнив: setProgressDrawable (draw), который был моим настраиваемым индикатором выполнения, затем установите layoutParams в партитуру. –

+0

Рад, что я мог помочь. – Ridcully

 Смежные вопросы

  • Нет связанных вопросов^_^