7

我正在使用这个 CoverFlow: http: //www.inter-fuser.com/2010/02/android-coverflow-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>
4

3 回答 3

3

谢谢 David,我是 Mike 的同事之一,但我从来没有写过一行 Java。我在我们公司的iOS部门工作。我明白你在说什么。你的回答很有帮助,写得很好!

我只需要添加:

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

因为你的 onItemSelected 没有被调用(更新当前标记),我不知道为什么。

但是,coverFlow.selection( int , bool)不是动画。它只是加载视图时的 set 方法。例如,coverFlow.selection(3,true)将第四张图片设置在封面流的中心。

于 2012-11-20T17:26:11.310 回答
3

当我试图找出如何添加动画时,我遇到了这个,它只在一行中完成了所有的事情:

向左走

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

向右走

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

(只需将每一行添加到各自的按钮 onclick 方法中

希望这可以帮助任何发现自己处于与我相同情况的人:)

于 2012-11-26T11:03:08.457 回答
2

我希望我能理解你的问题。如果是这样,这是一个想法:

您需要存储一个私有实例变量来跟踪从封面流中显示的图像的当前位置。然后,您从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
            }
};

最后,您所要做的就是使用setSelection( currentImagePosition+1 )或设置每个按钮的 onclick 侦听器以更改为上一个或下一个图像setSelection( currentImagePosition-1 )。顺便问一下,do 的 true 或 false 参数是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

祝你好运!!!

于 2012-11-09T22:46:49.033 回答