2

我正在使用网站上的一些代码进行封面流,

http://www.inter-fuser.com/2010/01/android-coverflow-widget.html

正常工作的coverflow

这个coverflow很好用,没有问题。但是,当我尝试将其放入 xml 布局中时,它不会显示出来,只显示了封面流的黑色背景墙纸,但缺少封面流。

布局中缺少覆盖流

我想把它放在 xml 布局中的原因是需要在页面底部放置按钮。所以我决定在coverflow下方的屏幕下部制作一个带有按钮的xml布局。

有什么问题或我遗漏了什么使覆盖流无法在 xml 布局中工作?

我的代码中可能缺少一些东西才能正常工作。我做了以下事情来尝试让它工作。代码作者使它看起来您所要做的就是使用包含的示例代码来设置内容视图。并在布局中创建一个简单的 xml 文件,它应该可以工作。

我不明白为什么coverflow 本身工作得这么好,并且放在布局内时不起作用。

是否有一个需要做的事情的清单才能使这样的事情起作用?

coverflow 代码的作者添加了两个注释掉的行作为示例,可以在您制作自己的 cusom xml 视图时使用

         //Use this if you want to use XML layout file
    //setContentView(R.layout.main);
    //coverFlow =  (CoverFlow) findViewById(R.id.coverflow);

我删除了这些行的注释,以便我可以使用它们。

接下来我将以下代码添加到 xml 布局中

      <com.vagina.destruction.CoverFlow
        android:id="@+id/coverflow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
      </com.vagina.destruction.CoverFlow>

这是我从 Eclipse 中的可视化布局编辑器收到的错误消息

无法实例化以下类: - com.vagina.destructon.CoverFlow(开放类,显示错误日志) - com.vagina.destruction.CoverFlowExample(开放类,显示错误日志)查看错误日志(窗口 > 显示视图)更多细节。提示:当在 Eclipse 中显示时,在自定义视图中使用 View.isInEditMode() 以跳过代码

这是coverflow示例活动开始时的代码部分

 public class CoverFlowExample extends Activity implements OnItemClickListener {
 /** Called when the activity is first created. */

int imageCount = 0;
Cursor cur;
String toastResult;
String pathName;
 ArrayList<String> list1 = new ArrayList<String>();
private int blocker = 0;
private int imagePosition;
private int pathIndex;
private int indexer;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    CoverFlow coverFlow;
    coverFlow = new CoverFlow(this);

    Bundle extras = getIntent().getExtras();
    if(extras !=null) {

     imagePosition = extras.getInt("imagePosition");

    }


    String[] proj2 = {MediaStore.Images.Media.DATA};
    Cursor cur2 = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj2,  MediaStore.Images.Media.IS_PRIVATE + "='" + 1 +"'", null, null);

    imageCount = cur2.getCount();


    cur2.close();

    coverFlow.setAdapter(new ImageAdapter(this));

    ImageAdapter coverImageAdapter =  new ImageAdapter(this);

    coverFlow.setAdapter(coverImageAdapter);

    coverFlow.setSpacing(-10);
    coverFlow.setSelection(imageCount, true);

 //  setContentView(coverFlow);

    coverFlow.setOnItemClickListener(this);

    coverFlow.setSelection(imagePosition);


    coverFlow =  (CoverFlow) findViewById(R.id.coverflow);

    //Use this if you want to use XML layout file
         setContentView(R.layout.activity_coverflow);
    coverFlow =  (CoverFlow) findViewById(R.id.coverflow);

    // centers the image on coverflow to the same image selected in the previous activity
      coverFlow.setBackgroundResource(R.drawable.blanklarge);
4

1 回答 1

3

用这个

     public class CoverFlowExample extends Activity implements OnItemClickListener {
     /** Called when the activity is first created. */

    int imageCount = 0;
    Cursor cur;
    String toastResult;
    String pathName;
     ArrayList<String> list1 = new ArrayList<String>();
    private int blocker = 0;
    private int imagePosition;
    private int pathIndex;
    private int indexer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Use this if you want to use XML layout file
        setContentView(R.layout.activity_coverflow);
        CoverFlow coverFlow;
        coverFlow =  (CoverFlow) findViewById(R.id.coverflow);

/*        CoverFlow coverFlow;
        coverFlow = new CoverFlow(this); */

        Bundle extras = getIntent().getExtras();
        if(extras !=null) {

         imagePosition = extras.getInt("imagePosition");

        }


        String[] proj2 = {MediaStore.Images.Media.DATA};
        Cursor cur2 = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj2,  MediaStore.Images.Media.IS_PRIVATE + "='" + 1 +"'", null, null);

        imageCount = cur2.getCount();


        cur2.close();

        coverFlow.setAdapter(new ImageAdapter(this));

        ImageAdapter coverImageAdapter =  new ImageAdapter(this);

        coverFlow.setAdapter(coverImageAdapter);

        coverFlow.setSpacing(-10);
        coverFlow.setSelection(imageCount, true);

        coverFlow.setOnItemClickListener(this);

        coverFlow.setSelection(imagePosition);



        // centers the image on coverflow to the same image selected in the previous activity
          coverFlow.setBackgroundResource(R.drawable.blanklarge);

基本上问题是,一旦你在 xml 中声明了这些东西,一旦你使用 setCONntentView 对它们进行膨胀,它们就会自动创建。您可以使用 findViewById 获取那些已经创建的对象,而无需使用“x = new x()”再次创建它们

于 2012-12-04T04:16:18.747 回答