2010-10-03 3 views
6

Tôi đang cố gắng tạo một ứng dụng Android cho phép tôi hiển thị toàn màn hình với các nút tiếp theo và trước đó ở trên cùng để thay đổi giữa chúng.android image "viewer" app

Mọi người có thể chỉ cho tôi một số hướng dẫn nơi tôi có thể tìm thấy hướng dẫn về nội dung tương tự không?

Nếu không, phương pháp nào tốt nhất để sử dụng để đưa hình ảnh vào ứng dụng? Tôi đã thử một số cách để tạo các lớp đối tượng cho các hình ảnh và khởi tạo nó với một bản vẽ trong mỗi lớp bằng cách sử dụng Nhà máy bitmap để trả về hình ảnh nhưng điều đó sẽ không hoạt động.

Tôi là người mới bắt đầu sử dụng Android và thực sự có thể sử dụng tài liệu tham khảo nhưng không thể tìm thấy bất kỳ nội dung nào hữu ích bao gồm chủ đề này.

Trả lời

10

Là một newbie bản thân mình, tôi đã làm việc với điều này và nó rất đơn giản. Dưới đây là một số mã (có thể có một cách tốt hơn nhưng đây là cách tôi đã tìm ra cách để làm điều đó):

package com.imageviewexample; 

import android.app.Activity;  
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 

public class ImageViewExample extends Activity implements OnClickListener { 

    /** Called when the activity is first created. */ 

    int image_index = 0; 
    private static final int MAX_IMAGE_COUNT = 3; 

    private int[] mImageIds = { 
      R.raw.image1, 
      R.raw.image2, 
      R.raw.image3 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button btnPrevious = (Button)findViewById(R.id.previous_btn); 
     btnPrevious.setOnClickListener(this);  
     Button btnNext = (Button)findViewById(R.id.next_btn); 
     btnNext.setOnClickListener(this); 

     showImage();   

    } 

    private void showImage() { 

     ImageView imgView = (ImageView) findViewById(R.id.myimage);    
     imgView.setImageResource(mImageIds[image_index]);  

    } 

    public void onClick(View v) { 

     switch (v.getId()) { 

      case (R.id.previous_btn): 

       image_index--; 

       if (image_index == -1) {      
        image_index = MAX_IMAGE_COUNT - 1;     
       } 

       showImage(); 

      break; 

      case (R.id.next_btn): 

       image_index++; 

       if (image_index == MAX_IMAGE_COUNT) {    
       image_index = 0;     
      } 

       showImage(); 

      break;  

     } 

    } 
} 

Và đây là main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

<Button 
    android:id="@+id/previous_btn" 
    android:layout_width="124dip" 
    android:layout_height="wrap_content" 
    android:text="Previous" 
    /> 

<Button 
    android:id="@+id/next_btn" 
    android:layout_width="124dip" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/previous_btn" 
    android:text="Next" 
    /> 

<ImageView 
    android:id="@+id/myimage" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/previous_btn" 
    />   

</RelativeLayout> 
+0

Điều này hoạt động hoàn hảo. Điều gì khiến tôi phát điên là các dự án thử nghiệm 3 hoặc 4 của tôi về cơ bản đã làm điều này một cách chính xác theo cùng một cách, nhưng chúng sẽ bị hủy hoặc không hoạt động theo cách khác. Cảm ơn vì đã cứu tôi khỏi xé tóc ra. Phần tôi thấy khác với tôi là onClickListener, bạn có thể lý do tại sao nó phải được đặt thành "cái này", chỉ vì vậy tôi có thể thử hiểu rõ hơn. Cảm ơn một lần nữa. – Hamid

+0

Làm quen với Android, tôi thực sự không thể giải thích tại sao nó phải được đặt thành "cái này". Tôi nghĩ * "this" chỉ tham chiếu đến lớp học của bạn, hoặc hoạt động chính. Giống như trong ví dụ trên, "this" có thể được thay thế bằng "ImageViewExample.this" và nó sẽ hoạt động tương tự. Tôi đã học được những điều trên kể từ khi đọc http://developer.android.com/guide/topics/ui/ui-events.html – ShadowGod

+0

Cảm ơn bạn lần nữa. Hữu ích và tốt bụng nhất. – Hamid

8

Đây là một người xem hình ảnh giải pháp với chế độ xem lưới của các tài nguyên hình ảnh mà từ đó bạn có thể chọn ảnh và hiển thị nó dưới dạng một ảnh. Trong chế độ xem ảnh đơn này, được thực hiện bằng PictureViewer.java, bạn có thể duyệt ảnh tài nguyên bằng nút trái và phải. Bạn cũng có thể quay lại chế độ xem lưới được thực hiện với HelloGridViewActivity.java. ImageAdapter.java được sử dụng để xác định các tài nguyên và phương thức xem lưới. Hy vọng điều này sẽ giúp:

HelloGridViewActivity.java:

package com.example.hellogridview; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.GridView; 

public class HelloGridViewActivity extends Activity { 

private long prev=0,next= 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 



    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final 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) { 


      prev = ImageAdapter.getPrevItemId(position); 
      next = ImageAdapter.getNextItemId(position); 

      showImage(gridview.getAdapter().getItemId(position),position); 


     } 
    }); 

} 
private void showImage(long id, int pos){ 
    Intent pictureViewer = new Intent(this, PictureViewer.class); 
    pictureViewer.putExtra("pictureId",id); 
    pictureViewer.putExtra("picturePosition", pos); 
    pictureViewer.putExtra("picturePrevId", prev); 
    pictureViewer.putExtra("pictureNextId", next); 

    startActivityForResult(pictureViewer,0); 

    } 
}  

ImageAdapter.java:

package com.example.hellogridview; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

public ImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    return mThumbIds.length; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return mThumbIds[position]; 
} 

public static long getPrevItemId(int position) { 
    if(--position<0) position = 21; 
    return mThumbIds[position]; 
} 

public static long getNextItemId(int position) { 
    if(++position>21) position = 0; 
    return mThumbIds[position]; 
} 

// create a new ImageView for each item referenced by the Adapter 
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; 
} 

// references to our images 
private static Integer[] mThumbIds = { 
     R.drawable.sample_2, R.drawable.sample_3, 
     R.drawable.sample_4, R.drawable.sample_5, 
     R.drawable.sample_6, R.drawable.sample_7, 
     R.drawable.sample_0, R.drawable.sample_1, 
     R.drawable.sample_2, R.drawable.sample_3, 
     R.drawable.sample_4, R.drawable.sample_5, 
     R.drawable.sample_6, R.drawable.sample_7, 
     R.drawable.sample_0, R.drawable.sample_1, 
     R.drawable.sample_2, R.drawable.sample_3, 
     R.drawable.sample_4, R.drawable.sample_5, 
     R.drawable.sample_6, R.drawable.sample_7 
    }; 
}  

PictureViewer.java:

package com.example.hellogridview; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 


public class PictureViewer extends Activity { 

long picItem,picPrevItem,picNextItem; 
int picPosition; 
private ImageView m_vwImage; 


public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.picture_layout); 


    //citanje podataka prosledjenih ovoj aktivnosti 
    //namera koja je pokrenula ovu aktivnost 
    Intent i = getIntent(); 

    picItem = i.getLongExtra("pictureId", -1); 
    picPrevItem = i.getLongExtra("picturePrevId", -1); 
    picNextItem = i.getLongExtra("pictureNextId", -1); 
    picPosition = i.getIntExtra("picturePosition", -1); 
    m_vwImage = (ImageView) findViewById(R.id.imageview); 


    //menjamo ulazne vrednosti da bi ih takve prosledili kao povratne 
    Log.i("Nemanja", "picItem" + picItem); 

    Drawable image = getResources().getDrawable((int)picItem); 
    m_vwImage.setImageDrawable(image); 


    Button startButton = (Button) findViewById(R.id.return_button); 
    startButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 
      finish(); 
     } 
    });  

    Button leftButton = (Button) findViewById(R.id.left_button); 
    leftButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 
      Drawable imagePrev = getResources().getDrawable((int)picPrevItem); 
      m_vwImage.setImageDrawable(imagePrev); 

      if(--picPosition<0) picPosition = 21; 
      picPrevItem = (ImageAdapter.getPrevItemId(picPosition)); 
      picNextItem = (ImageAdapter.getNextItemId(picPosition)); 

     } 
    }); 

    Button rightButton = (Button) findViewById(R.id.right_button); 
    rightButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 
      Drawable imageNext = getResources().getDrawable((int)picNextItem);  
      m_vwImage.setImageDrawable(imageNext); 

      if(++picPosition>21) picPosition = 0; 
      picNextItem = (ImageAdapter.getNextItemId(picPosition)); 
      picPrevItem = (ImageAdapter.getPrevItemId(picPosition)); 
     } 
    }); 
} 

}

HelloGridView Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.hellogridview" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="8" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".HelloGridViewActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".PictureViewer" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest>