2015-01-04 3 views
0

В основном активность просмотра списка андроидов прозрачна, поэтому мне удалось сделать ее сплошной черной, используя пользовательский макет, но как сделать это, как третье изображение, где угол цвета будет случайным.андроид подгонял реализацию Listview

заранее спасибо

MainActivity.java

import android.app.Activity; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.util.DisplayMetrics; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.Animation; 
import android.view.animation.TranslateAnimation; 
import android.widget.FrameLayout; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.RelativeLayout; 
import android.widget.ArrayAdapter; 

public class MainActivity extends Activity { 

// Declare 
private LinearLayout slidingPanel; 
private boolean isExpanded; 
private DisplayMetrics metrics; 
private RelativeLayout headerPanel; 
private int panelWidth; 
private int panelWidth1; 


private ImageView menuViewButton,menuRightButton; 

FrameLayout.LayoutParams menuPanelParameters; 
FrameLayout.LayoutParams slidingPanelParameters; 
LinearLayout.LayoutParams headerPanelParameters; 
LinearLayout.LayoutParams listViewParameters; 

//Example 
//////// 
String[] Example = new String[] 
     { "Android Introduction","Android Setup/Installation","Android Hello World", 
       "Android Layouts/Viewgroups","Android Activity & Lifecycle","Intents in Android"}; 


//////// 
//Example 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_layer_stack); 

    // Initialize 
    metrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    panelWidth = (int) ((metrics.widthPixels) * -0.65);//Right panel width 
    panelWidth1 = (int) ((metrics.widthPixels) * 0.65);//left panel width 

    headerPanel = (RelativeLayout) findViewById(R.id.header); 
    headerPanelParameters = (LinearLayout.LayoutParams) headerPanel 
      .getLayoutParams(); 
    headerPanelParameters.width = metrics.widthPixels; 
    headerPanel.setLayoutParams(headerPanelParameters); 

    slidingPanel = (LinearLayout) findViewById(R.id.slidingPanel); 
    slidingPanelParameters = (FrameLayout.LayoutParams) slidingPanel 
      .getLayoutParams(); 
    slidingPanelParameters.width = metrics.widthPixels; 
    slidingPanel.setLayoutParams(slidingPanelParameters); 
    /////// 

    ArrayAdapter<String> ExampleArrayAdapter = new CustomAdapter(this, Example); 
    //changing code//practice 
    /*new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
      Example);*/ 
    ListView ExampleListView = (ListView)findViewById(R.id.listView); 
    ExampleListView.setAdapter(ExampleArrayAdapter); 
    /////// 

    // Slide the Panel 
    menuRightButton = (ImageView) findViewById(R.id.menuViewButton); 
    menuRightButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (!isExpanded) { 
       isExpanded = true; 
       // Expand 

       FragmentManager fragmentManager = getFragmentManager(); 

       FragmentTransaction fragmentTransaction = fragmentManager 
         .beginTransaction(); 
       fragmentTransaction.replace(R.id.menuPanel, 
         new LeftMenuFragment()); 
       fragmentTransaction.commit(); 
       new ExpandAnimation(slidingPanel, panelWidth1, 
         Animation.RELATIVE_TO_SELF, 0.0f, 
         Animation.RELATIVE_TO_SELF, 0.65f, 0, 0.0f, 0, 0.0f); 

      } else { 
       isExpanded = false; 
       // Collapse 

       new CollapseAnimation(slidingPanel, panelWidth1, 
         TranslateAnimation.RELATIVE_TO_SELF, 0.65f, 
         TranslateAnimation.RELATIVE_TO_SELF, 0.0f, 0, 0.0f, 
         0, 0.0f); 

      } 
     } 
    }); 


} 
} 

custom_layout.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="70dp" 
android:orientation="horizontal" 
android:layout_marginTop="60dp" 
android:background="@drawable/blue_bg"> 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="70dp" 
    android:layout_height="60dp" 
    android:src="@drawable/ic_launcher" 
    android:layout_marginLeft="5dp" 
    android:layout_marginTop="5dp" /> 


<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_marginLeft="10dp" 
    android:gravity="left" > 


    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textSize="19sp" 
    android:textColor="#ffffff" 
    android:textStyle="bold" /> 


    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="match_parent" 
     android:layout_height="20dp" 
     android:text="Tweet body text here" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_marginTop="5dp" 
    android:ellipsize="end" 
    android:lines="3" 
    android:textColor="#ffffff" 
    android:textSize="14sp" /> 


    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Small Text" 
    android:layout_marginTop="5dp" 
    android:textColor="#ffffff" 
    android:textSize="12sp" /> 


</LinearLayout> 


</LinearLayout> 

CustomAdapter.java

public class CustomAdapter extends ArrayAdapter { 
private LayoutInflater inflater; 
public CustomAdapter (Activity activity, String[] items){ 
    super(activity, R.layout.custom_layout, items); 
    inflater = activity.getWindow().getLayoutInflater(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    return inflater.inflate(R.layout.custom_layout, parent, false); 
} 
} 

I ч ave удалось заставить его показать случайный цвет с обновлением функции get view со следующим кодом, но каждый раз, когда я просматриваю изменения цвета, как я могу сделать его стабильным, чтобы после того, как цвет назначен, он не изменится?

Random rnd = new Random(); 
    int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 

    View rowView = inflater.inflate(R.layout.custom_layout, parent, false); 
    rowView.setBackgroundColor(color); 
+0

Покажите нам код до сих пор. В основном вам потребуется подкласс адаптера для создания представлений для элементов. –

+0

Я обновил сообщение с кодом ... –

ответ

1

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

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_marginTop="70dp" 
android:layout_height="70dp" 
android:background="@drawable/blue_bg"> 

<LinearLayout 
    android:layout_marginLeft="20dp" 
    android:layout_width="345dp" 
    android:layout_height="70dp" 
    android:background="@drawable/white_bg"> 
    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="70dp" 
     android:layout_height="60dp" 
     android:src="@drawable/ic_launcher" 
     android:layout_marginLeft="5dp" 
     android:layout_marginTop="5dp" /> 


    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginLeft="10dp" 
     android:gravity="left" > 


     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Large Text" 
      android:layout_marginTop="10dp" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textSize="19sp" 
      android:textColor="#000000" 
      android:textStyle="bold" /> 


     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="match_parent" 
      android:layout_height="15dp" 
      android:text="Tweet body text here" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:layout_marginTop="5dp" 
      android:ellipsize="end" 
      android:lines="3" 
      android:textColor="#000000" 
      android:textSize="14sp" /> 


    </LinearLayout> 

</LinearLayout> 

</LinearLayout> 

Изменение кода Java с помощью следующего кода

Random rnd = new Random(); 

    int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(257), rnd.nextInt(258)); 

    View rowView = inflater.inflate(R.layout.custom_layout, parent, false); 
    rowView.setBackgroundColor(color); 
1

Вы должны использовать пользовательский адаптер с двумя видами. Вы можете изменить цвет левого представления в методе getView адаптера.

+0

вы можете предложить несколько кодов? это будет полезно для меня –

+0

опубликует его через некоторое время –

0

Создайте свой файл макета следующим образом.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:weightSum="1"> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:layout_weight="0.3" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:layout_weight="0.7" /> 

</LinearLayout> 

Ваш класс активности onCreate() должен выглядеть примерно так.

ListView listView = (ListView) findViewById(R.id.listView1); 
String[] Example = new String[] { "Android Introduction", 
"Android Setup/Installation", "Android Hello World", 
"Android Layouts/Viewgroups", "Android Activity & Lifecycle", 
"Intents in Android" }; 

ArrayList<String> list = (ArrayList<String>) Arrays.asList(Example); 
CustomAdapter adapter = new CustomAdapter(this, list); 
listView.setAdapter(adapter); 

Создайте собственный класс адаптера следующим образом.

public class CustomAdapter extends BaseAdapter { 
    Context context; 
    ArrayList<String> listOfContents; 
    LayoutInflater inflater; 

    public CustomAdapter(Context context, ArrayList<String> list) { 
     this.context = context; 
     listOfContents = list; 
     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     convertView = inflater.inflate(R.layout.list_row, null); 

     Random rnd = new Random(); 
     int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), 
       rnd.nextInt(256)); 

     TextView clorText = (TextView) convertView.findViewById(R.id.textView1); 
     TextView clorText2 = (TextView) convertView 
       .findViewById(R.id.textView2); 

     clorText.setBackgroundColor(color); 
     clorText2.setBackgroundColor(Color.BLACK); 

     return convertView; 
    } 
} 

Этот код полностью не проверен. Вы должны получить общее представление об использовании Listview и пользовательского адаптера и генерации случайного цвета.

+0

извините, но код еще не запущен, нет ошибки –

+0

Я возьму вам 200 долларов за это: D: P. Должна быть проблема с раздуванием строки в пользовательском адаптере. Вы должны сделать эту часть. – EagleEye

+0

hahaha: D sir, с этой суммой я сделаю весь проект: P сэр мне удалось сделать цвет строки случайным с помощью этого кода в функции получения вида Random rnd = new Random(); int color = Color.argb (255, rnd.nextInt (256), rnd.nextInt (256), rnd.nextInt (256)); Показать rowView = inflater.inflate (R.layout.custom_layout, parent, false); rowView.setBackgroundColor (цвет); , но я хочу, чтобы цвет был на левой стороне, а остальное должно быть полностью белым –

0

Цвет меняется, поскольку элементы списка перерабатываются, теперь, когда android вызывает метод getView() во второй раз для определенного элемента списка при прокрутке, вы восстанавливаете значение цвета и меняете его.

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

Что вы можете сделать, это создать список массивов, в котором хранится значение цвета, а затем внутри метода getView() проверить, существует ли цвет для определенной позиции в arraylist. Если да, то используйте этот цвет, иначе создайте случайный цвет, а затем добавьте его в массив цветов.

E.g. (Непроверенные код, но подход должен быть похож)

Внутри GetView():

int color = 0; 
if(colorsList.size > position) { 
    //This means that the color has already been generated for this position 
    color = colorsList.get(position); 
} else { 
    //Color hasnt been generated for this position. 
    color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), 
      rnd.nextInt(256)); 
    colorsList.add(color); 
} 
clorText.setBackgroundColor(color); 
+0

сэр, не могли бы вы дать мне, откуда этот цветной список, так как я не определил список цветов –

+0

Вам нужно будет определить новый colorList ArrayList внутри вашего адаптера, где вы можете сохранить значения цвета при сгенерировании. –

+0

Сэр, небольшой код или пример будет очень полезен –

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