Итак, я искал ответ на вопрос или возможное решение этой проблемы в течение пары недель и до сих пор не получил дальнейшего распространения. Я работаю над созданием приложения, которое вознаграждает пользователей точками после определенных вещей. Одна из страниц, которую они могут посетить, - это лидирующая доска, основанная на друзьях пользователей. Я могу внедрить плату лидеров и печатать пользователей в порядке, основанном на их точках, но не может реализовать стиль стиля гистограммы. Как так: 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).
Поскольку свойства вашего LeaderboardDM являются общедоступными, вы можете потерять получатели и сеттеры и получить к ним доступ напрямую. – Ridcully