2014-10-20 69 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」來完成的。不過,如果你想保持靜態,你可以在這裏放置任意數量的柱。