2010-10-03 19 views
6

Ich versuche, eine Android-App zu erstellen, die mich Bilder Vollbild mit nächsten und vorherigen Schaltflächen an der Spitze anzeigen zwischen ihnen wechseln lassen.android image "viewer" app

Kann mir jemand auf einige Tutorials hinweisen, wo ich Anweisungen zu etwas Ähnlichem finden kann?

Wenn nicht, was ist die beste Methode, um die Bilder in die App zu bekommen? Ich habe mehrere Möglichkeiten ausprobiert, um Objektklassen für die Bilder zu erstellen und sie mit einem Zeichen zu versehen, das die Bitmap Factory verwendet, um das Bild zurückzugeben, aber das wird nicht funktionieren.

Ich bin ein Anfänger zu Android und könnte wirklich Referenzmaterial verwenden, kann aber nichts Nützliches finden, das dieses Thema abdeckt.

Antwort

10

Als Neuling habe ich selbst damit gearbeitet und es ist sehr einfach. Hier ist ein Code (vielleicht gibt es einen besseren Weg, aber das ist die Art, wie ich herausgefunden, wie es zu tun):

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;  

     } 

    } 
} 

Und das ist die 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

Dies funktioniert perfekt. Was mich wahnsinnig macht, ist, dass meine 3 oder 4 Testprojekte im Wesentlichen genauso vorgingen, aber sie würden entweder gezwungenermaßen schließen oder anders arbeiten. Danke, dass du mich davor bewahrt hast, mir die Haare auszureißen. Der Teil, der sich von meinem unterscheidet, ist der onClickListener. Könnte man sagen, warum er auf "this" eingestellt sein muss, nur um ein besseres Verständnis zu erlangen. Danke noch einmal. – Hamid

+0

Da ich neu bei Android bin, kann ich wirklich nicht erklären, warum es auf "this" eingestellt sein muss. Ich denke, das "Dies" bezieht sich nur auf deine Klasse oder Hauptaktivität. Wie im obigen Beispiel könnte "this" durch "ImageViewExample.this" ersetzt werden und es würde genauso funktionieren. Ich habe das obige vom Lesen gelernt http://developer.android.com/guide/topics/ui/ui-events.html – ShadowGod

+0

Danke nochmal. Am hilfreichsten und nett. – Hamid

8

Dies ist ein Bildbetrachter ist Lösung mit Rasteransicht von Bildquellen, aus denen Sie ein Bild auswählen und als einzelnes Bild anzeigen können. In dieser Einzelbildansicht, die mit PictureViewer.java durchgeführt wird, können Sie mit der linken und rechten Taste Bilder der Ressourcenbilder durchsuchen. Sie können auch zur Rasteransicht zurückkehren, die mit HelloGridViewActivity.java durchgeführt wurde. ImageAdapter.java wird zum Definieren von Ressourcen und Methoden für die Rasteransicht verwendet. Hoffe, das hilft:

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>