Изменить вид onClick coverflow – Android

Я использую этот CoverFlow: http://www.inter-fuser.com/2010/02/androidcoverflow-widget-v2.html

Я хочу, чтобы иметь возможность изменять вид, когда я нажимаю кнопку, причем кнопка является символом «назад / вперед», который приведет вас к предыдущему / следующему элементу в потоке.

Я немного изменил покрытие, чтобы вместо этого использовать XML-макет.

Вот мой метод onCreate ():

setContentView(R.layout.main); CoverFlow coverFlow = (CoverFlow)findViewById(R.id.coverflow); coverFlow.setAdapter(new ImageAdapter(this)); ImageAdapter coverImageAdapter = new ImageAdapter(this); coverFlow.setAdapter(coverImageAdapter); coverFlow.setSpacing(-20); coverFlow.setSelection(0, true); coverFlow.setAnimationDuration(1000); tv = (TextView)findViewById(R.id.textView1); coverFlow.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Toast.makeText(getBaseContext(), String.valueOf(arg2), Toast.LENGTH_SHORT).show(); } }); coverFlow.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { tv.setText(String.valueOf(arg2)); } @Override public void onNothingSelected(AdapterView<?> arg0) { // Do something } }); 

Мой XML:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/home_background" android:orientation="vertical" > <com.demo.app.coverflow.CoverFlow android:id="@+id/coverflow" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="39dp" android:layout_marginLeft="35dp" android:background="@drawable/button_left" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="39dp" android:layout_marginRight="35dp" android:background="@drawable/button_right" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="55dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="hello" android:textColor="@color/White" android:textSize="16dp" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_marginRight="170dp" android:layout_marginTop="15dp" android:src="@drawable/unsa_logo" /> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="14dp" android:layout_marginTop="23dp" android:src="@drawable/pnc_logo" /> </RelativeLayout> 

Спасибо Дэвиду, я один из коллег Майка, но я никогда не писал строки Java. Я работаю в отделе iOS нашей компании. Я понял, о чем вы говорили. Ваш ответ был полезен и хорошо написан!

Мне просто пришлось добавить:

 if ( currentimageposition < coverFlow.getcount()-1) { coverFlow.setSelection(currentImagePosition +1, true); currentImagePosition = currentImagePosition +1; } 

Поскольку ваш onItemSelected не был вызван (обновить текущий маркер), я не знаю почему.

Однако coverFlow.selection( int , bool) не анимируется. Это просто заданный метод при загрузке представления. Например, coverFlow.selection(3,true) установит четвертое изображение в центре покрытия.

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

иди налево

coverFlow.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, new KeyEvent(0, 0));

Иди направо

coverFlow.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(0, 0));

(Просто добавьте каждую строку к соответствующей кнопке onclick methods

Надеюсь, это поможет любому, кто найдет их в той же ситуации, что и я 🙂

Надеюсь, я понимаю ваш вопрос. Если да, вот идея:

Вам нужно сохранить приватную переменную экземпляра, которая отслеживает текущую позицию изображения, отображаемого из потока обложек. setOnItemSelectedListener() вы обновляете его из setOnItemSelectedListener() , который унаследован от Gallery. На кнопке «назад» или «вперед» вы просто устанавливаете свой текущий выбор +/- 1 в зависимости от нажатой кнопки.

Поэтому в вашей деятельности добавьте переменную экземпляра int, которая будет отслеживать позицию как …

 public class MyActivity { private int currentImagePosition = -1; //add the rest of your onCreate code here... } 

Затем вам нужно будет обновить текущую позицию изображения, которое в настоящее время отображается в потоке обложки. Вы можете сделать это, переопределив setOnItemSelectedListener так (внутри вашего метода onCreate):

 coverFlow.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { currentImagePosition = position; //this will update your current marker } }; 

Наконец, все, что вам нужно сделать, – установить, чтобы прослушиватели onclick каждой кнопки переключались на предыдущее или следующее изображение, используя setSelection( currentImagePosition+1 ) или setSelection( currentImagePosition-1 ) . Кстати, что такое истинный или ложный параметр setSelection() ? Я не уверен, что он делает, поэтому я просто буду использовать true как это было на самом деле. Ваш onCreate() теперь будет выглядеть примерно так:

 @Override public void onCreate(Bundle savedInstanceState){ //insert your other code in onCreate here in this spot.... //add the following lines to your code: Button goLeft = (Button) findViewById(R.id.button1); goLeft.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { //go to previous image if( currentImagePosition > 0 ){ //i'm assuming you dont want to go left anymore once at the leftmost image coverFlow.setSelection(currentImagePosition - 1, true); } } } ) ; Button goRight = (Button) findViewById(R.id.button2); goRight.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { //go to previous image if( currentImagePosition < coverFlow.getCount()-1 ){ //i'm assuming you dont want to go left anymore once at the leftmost image coverFlow.setSelection(currentImagePosition + 1, true); } } } ) ; } 

ПРИМЕЧАНИЕ. Предполагается, что часть о позиции обновления работает от чтения. Получите позицию текущего изображения, отображаемого в Галерее, поэтому я надеюсь, что это сработает. Если нет, по крайней мере, я попробовал: D

Удачи!!!