2015-12-29 2 views
1

Здравствуйте, у меня есть HorizontalScrollView, который я бы хотел заполнить некоторыми изображениями фиксированного размера с динамическим текстом внутри этого изображения. Вот пример одного из этих изображений:Многоразовое изображение с динамическим текстом внутри

****** //where "AK" is a player's initials 
* AK * // and 34 is his score 
* 34 * // and each image will have a unique color 
****** 

Я хочу, чтобы заполнить мою HorizontalScrollView с переменным числом этих и иметь возможность динамически обновлять свои инициалы и оценку каждый так часто. Прямо сейчас, я могу только заполнить HorizontalScrollView с предопределенным количеством TextViews в моем XML-файле. Как создать шаблон для этих изображений и динамически обновлять значения внутри них? В идеале, это изображение будет просто кругом с инициалами и счетом, центрированным внутри него. Благодаря!

ответ

0

вы можете установить изображение в качестве фона Относительной компоновки и установить текст в центре этой относительной компоновки в макете шаблона.

1

У нас есть аналогичная задача. Я предлагаю использовать следующее: 1. Создайте изображение с девятью патчами и определите область содержимого, где вы хотите поместить свой текст. Также определите растяжимые исправления для этой возможности. 2. Для TextView определите этот drawables как фон и предоставите ему некоторое дополнение. Надеюсь, это поможет. Если содержимое изменено, изображение должно растягиваться на основе содержимого.

0

Основная деятельность

public class MainActivity extends AppCompatActivity { 

    private ListView listView; 
    private MyAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     listView = (ListView) findViewById(R.id.listView1); 
     adapter = new MyAdapter(this); 
     adapter.addItem(new ModelPlayer("AK", "37")); 
     adapter.addItem(new ModelPlayer("BK", "36")); 
     adapter.addItem(new ModelPlayer("CK", "35")); 
     adapter.addItem(new ModelPlayer("DK", "34")); 
     listView.setAdapter(adapter); 
    } 

} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/btnGetList" > 
    </ListView> 

</RelativeLayout> 

MyAdapter

public class MyAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<ModelPlayer> players; 

    public MyAdapter(Context context) { 
     super(); 
     this.context = context; 
     players = new ArrayList<ModelPlayer>(); 
    } 

    public MyAdapter(Context context, ArrayList<ModelPlayer> players) { 
     super(); 
     this.context = context; 
     this.players = players; 
    } 

    public void addItem(ModelPlayer player) { 
     players.add(player); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return players.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return players.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    private class ViewHolder { 
     TextView txtPlayer, txtScore; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.layout_item, null); 
      holder = new ViewHolder(); 
      holder.txtPlayer = (TextView) convertView.findViewById(R.id.txtPlayer); 
      holder.txtScore = (TextView) convertView.findViewById(R.id.txtScore); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     ModelPlayer player = players.get(position); 
     holder.txtPlayer.setText(player.getPlayer()); 
     holder.txtScore.setText(player.getScore()); 
     return convertView; 
    } 
} 

layout_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <RelativeLayout 
     android:id="@+id/rlBack" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/shape_circle" 
     android:padding="20dp" > 

     <TextView 
      android:id="@+id/txtPlayer" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:text="AK" /> 

     <TextView 
      android:id="@+id/txtScore" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/txtPlayer" 
      android:layout_centerHorizontal="true" 
      android:text="34" /> 
    </RelativeLayout> 

</LinearLayout> 

ModelPlayer

public class ModelPlayer { 
    private String player, score; 

    public ModelPlayer(String player, String score) { 
     super(); 
     this.player = player; 
     this.score = score; 
    } 

    public String getPlayer() { 
     return player; 
    } 

    public void setPlayer(String player) { 
     this.player = player; 
    } 

    public String getScore() { 
     return score; 
    } 

    public void setScore(String score) { 
     this.score = score; 
    } 
} 

вытяжке/shape_circle.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 

    <solid android:color="#fa0000" > 
    </solid> 

</shape> 

Я надеюсь, что этот пример будет полезным для вас

+0

Ого спасибо так много, что было быстро! Тем не менее, я считаю, что эта реализация заказывает круги вертикально. Я искал, чтобы эти изображения в верхней части экрана упорядочивались по горизонтали. – vgbcell

+0

@vagabond_cell Для горизонтальной вы можете использовать горизонтальную ссылку ListView: https://github.com/MeetMe/Android-HorizontalListView –

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