2014-10-20 261 views
2

我在对话框中扩充布局,此布局显示电子书(96 ImageViews)的许多缩略图。 当我点击某个ImageView时,它会带我到某个页面。关键是我有96“if”语句,所以我想让代码更简单。我正在寻求建议或帮助实现这一目标。这里是我的代码:Android创建缩略图布局

缩略图布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#b8c9bc" 
    android:weightSum="1" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:id="@+id/thumblayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:weightSum="1" 
     android:layout_weight="0.2" 
     android:gravity="left" 
     android:visibility="visible" > 

       <ScrollView 
        android:id="@+id/ScrollView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_weight="0.9" > 

        <LinearLayout 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:orientation="vertical" > 

         <ImageView 
          android:id="@+id/imageView1" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_gravity="right" 
          android:src="@drawable/thumbpageh1" /> 

         <ImageView 
          android:id="@+id/imageView2" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:src="@drawable/thumbpageh2" /> 

         <ImageView 
          android:id="@+id/imageView3" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:src="@drawable/thumbpageh3" /> 

         <ImageView 
          android:id="@+id/imageView4" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:src="@drawable/thumbpageh4" /> 

         <ImageView 
          android:id="@+id/imageView5" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:src="@drawable/thumbpageh5" /> 

      . 
      . 
      . 
      . 
      . 
      . 
      . 
      . 


          <ImageView 
          android:id="@+id/imageView101" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_gravity="left" 
          android:src="@drawable/thumbpageh97" /> 
        </LinearLayout> 

       </ScrollView> 


        <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/but" 
     android:text="OK" 
     android:textColor="#e2edd3" 
     android:textSize="18sp" 
     android:layout_weight="0.1" 
     android:textStyle="bold" /> 


    </LinearLayout> 







</LinearLayout> 

Java代码:

 thumbbutton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 


      final Dialog dialog = new Dialog(context); 
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog.setContentView(R.layout.thumblayout); 


      WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes(); 

      wmlp.gravity = Gravity.TOP | Gravity.LEFT; 
      wmlp.x = 10; //x position 
      wmlp.y = 10; //y position 



      dialog.show(); 


    final Button cancel=(Button)dialog.findViewById(R.id.button1); 
    final ImageView thumbpage1=(ImageView)dialog.findViewById(R.id.imageView1); 
    final ImageView thumbpage2=(ImageView)dialog.findViewById(R.id.imageView2); 
    final ImageView thumbpage3=(ImageView)dialog.findViewById(R.id.imageView3); 
. 
. 
. 
. 
. 
. 
. 
    final ImageView thumbpage96=(ImageView)dialog.findViewById(R.id.imageView100); 
    final ImageView thumbpage97=(ImageView)dialog.findViewById(R.id.imageView101); 

    cancel.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     dialog.hide(); 
    // x=hsv.getScrollX(); 
    //  y=hsv.getScrollY(); 
     // Toast.makeText(getBaseContext(), "X="+String.valueOf(x)+" and Y="+String.valueOf(y), Toast.LENGTH_LONG).show(); 
    } 
}); 

    thumbpage1.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     view1.setImageResource(R.drawable.page1); 
     pagenumber=1; 
     int p1=(pagenumber*2)-2; 
     int p2=(pagenumber*2)-1; 
     pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

      myDbHelper.openDataBase(); 
      checkMemoButtonStatus(); 
      myDbHelper.close(); 
    } 
}); 


    thumbpage2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page2); 
      pagenumber=2; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
      checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

    thumbpage3.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page3); 
      pagenumber=3; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
       checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

    thumbpage4.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page4); 
      pagenumber=4; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
       checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

    thumbpage5.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page5); 
      pagenumber=5; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
       checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

    thumbpage6.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page6); 
      pagenumber=6; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
       checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

    thumbpage7.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page7); 
      pagenumber=7; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
       checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

    thumbpage8.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page8); 
      pagenumber=8; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
       checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

    thumbpage9.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page9); 
      pagenumber=9; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

       myDbHelper.openDataBase(); 
       checkMemoButtonStatus(); 
       myDbHelper.close(); 
     } 
    }); 

       . 
       . 
       . 
       . 
       . 
       . 
       . 
       . 
       . 




    thumbpage96.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page96); 
      pagenumber=96; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText(String.valueOf(p1)+" - "+String.valueOf(p2)); 

      myDbHelper.openDataBase(); 
      checkMemoButtonStatus(); 
      myDbHelper.close(); 
     } 
    }); 
    thumbpage97.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      view1.setImageResource(R.drawable.page97); 
      pagenumber=97; 
      int p1=(pagenumber*2)-2; 
      int p2=(pagenumber*2)-1; 
      pages.setText("192"); 

      myDbHelper.openDataBase(); 
      checkMemoButtonStatus(); 
      myDbHelper.close(); 
     } 
    }); 

//   visible++; 
//   
//   if(visible==1) 
//   { 
//    thumblayout.setVisibility(View.VISIBLE);  
//    thumblayout.setVisibility(0); 
//   } 
//   else 
//   { 
//    thumblayout.setVisibility(View.GONE); 
//    visible=0; 
//    
//   } 





      // TODO Auto-generated method stub 
     } 
    }); 

我搜索有关使用与图像的定制列表视图,还我搜索有关获取位置在scrollview中的视图,但它没有给予太多的帮助,谢谢

+1

从我看到你的看法是相当统一所以你为什么不使用listview?它更简单,更快:) – 2014-10-20 09:21:25

+0

好吧,我会尽力谢谢你 – 2014-10-20 09:31:41

+0

如果你有问题,请参阅我的答案第一步 – 2014-10-20 09:40:22

回答

1

所以我不会给你所有的代码,但我会尽量引导你如何使用ListView t o解决你的问题。

所以首先你需要有一个ListView更换整个滚动型,然后创建自定义视图ListView的一个ArrayAdapter

这是一个ArrayAdapter的例子:

public class MyAdapter extends ArrayAdapter<String>{ 

private static ViewHolder viewHolder; 
private final Context context; 
private ArrayList<String> urls; 

public NewsAdapter(Context context, ArrayList<String> urls) { 
    super(context, R.layout.fragment_newsfeed, urls); 
    this.context = context; 
    this.urls = urls; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.listview_child, parent, false); 
     viewHolder = new ViewHolder(); 
     viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
     viewHolder.imageItem.setImageDrawable(null); 
    } 
    final String url = urls.get(position); 
    //SETUP THE IMAGE HERE 
    return convertView; 
} 

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

static class ViewHolder { 
    ImageView imageView; 
} 

}

然后您可以传递网址或可绘制名称或任何图像来源。 如果您使用的是URL,我建议您使用Picasso,它很容易使用imageloader库。

如果您对我的回答其他任何问题随时问在评论:)

0

试试这个它是一个滚动视图..添加一个ID,scrollviews线性布局。 android:id="@+id/addlay"。并在java中引用它。 LinearLayout addlay = (LinearLayout) findViewById(R.id.addlay);。在使用任何循环过程循环遍历96个图像之后(例如for循环)..和programmaticaly创建一个imageview并将其添加到您引用的线性布局中。您可以设置标识符的循环值并设置要访问的url字符串tag..to的ImageView的

for(int i =0; i < 96; i++){ //you can use ++1 so to start form one..its your choice 
     ImageView iv = new ImageView(context); 
     iv.setId(i); 
     iv.setTag((String)"url"); 
     iv.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      arg0.getTag(); // you get your url... 
     } 
    }); 
     addlay.addView(iv); 
    } 

在此之后,你可以到其他事件作出响应或得到的图像,与此addlay.getFocusedChild()用户现在调情。获得调情视图id addlay.getFocusedChild().getId()同样的方式为tag..and等..

注:有可能是愚蠢的代码errors..cos我jux写

0

试图在XML韩元纯粹做到这一点让你远离你。如果你想改变ImageViews的属性怎么办?如果图像数量变化怎么办?

要创建网格或类似项目的列表,请使用GridView。它可以填充项目适配器或手动在您的代码。只有一列的GridViews的行为与列表类似。

的Android教程如何设置一个GridView每个适配器图片:你

Android GridView Tutorial

在你的情况至少需要XML文件:与GridView控件的页面。您也可以使用另一个XML来定义您的ImageView并在ImageAdapter中对它们进行膨胀,但在教程中它是通过代码完成的,所以我们坚持使用它。

适配器的命名只是一个惯例,如果您将其他视图或ViewGroups返回给调用者,则应该将其命名为(如使用卡时使用MyCardAdapter)。

这是你的主页:

main_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#b8c9bc" 
    android:weightSum="1" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:id="@+id/thumblayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:weightSum="1" 
     android:layout_weight="0.2" 
     android:gravity="left" 
     android:visibility="visible" > 

       <ScrollView 
        android:id="@+id/ScrollView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_weight="0.9" > 
        <GridView 
         android:id="@+id/myGridView" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         android:columnWidth="90dp" 
         android:numColumns="auto_fit" 
         android:verticalSpacing="10dp" 
         android:horizontalSpacing="10dp" 
         android:stretchMode="columnWidth" 
         android:gravity="center"/> 
       </ScrollView> 
    </LinearLayout> 
</LinearLayout> 

从教程的ImageAdapter重要的代码是方法getView(..):

public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(mThumbIds[position]); 
     return imageView; 
    } 

此方法被调用适配器中的每个项目,其中项目的数量在getCount()中定义。在getView()中,您可以从XML或代码创建ImageView并将其返回给调用者。你得到了视图的位置,可能是一个convertView和一个父ViewGroup。使用的位置来获取正确的图像资源,并可能为ImageView设置一个标签,这样即使没有GridView.onItemClickListener,也可以识别它。

如果convertView不为null,则应该使用它而不是创建新的ImageView。通过极好的边界加速GridView性能,并减少应用程序的内存占用量。

imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 

设置缩略图的大小,你可能想投入一些资源方面的价值调整为更大的屏幕。

关于GridView的好处是您不必采取任何措施来识别被点击的项目。 GridView为你做。

因此设置在GridView上一个单击处理程序是所有你需要(从Tutorial再次,代码)做:

GridView gridview = (GridView) findViewById(R.id.gridview); 
gridview.setAdapter(new ImageAdapter(this)); 

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

GridView控件的另一个优点是,它调整其电网的可用空间。这是通过指定android:numColumns =“auto_fit”来完成的。不过,如果你想保持静态,你可以在这里放置任意数量的柱。