2011-02-06 4 views
7

Использование примера Hello, World Gridview, я пытаюсь сделать изображение в полноэкранном режиме нажатием, вместо того, чтобы отображать положение изображения в массиве. Поскольку я не знаком с Android, и это моя первая попытка разработки с этим, я в недоумении. Я знаком с Java, хотя, и я пытался делать что-то вроде этого (которые не работают, очевидно):Создание полноэкранного изображения в приложении для Android android tutorial app

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

    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) { 
      showImage(v, position); 
      Toast.makeText(HelloAndroid.this, "" + parent.getId(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

private void showImage(View view, int position) { 
    ImageView imgView = (ImageView) view; 
    imgView.setImageResource(position);  
} 

Но сбой приложения (сила близко). Есть идеи?

Here is the tutorial app I am using

+0

Какая у вас ошибка? Что говорит LogCat? – John

+0

Он бросает нулевой указатель на imgView.setImageResource. Спасибо за отзыв о logcat, я просто использовал обычный отладчик. По крайней мере, теперь я вижу подробные ошибки :) view.getId() - -1 бит. – Organiccat

ответ

23
imgView.setImageResource(position); 

Это дает ошибку, потому что вы не используете его правильно. Параметр должен указывать на идентификатор ресурса изображения (который является int), например. R.id.imageid. Даже если вы должны предоставить правильный идентификатор ресурса, то, что вы хотите сделать, не будет работать.

Чтобы получить нужный идентификатор ресурса, вам нужно будет вызвать адаптер вида и использовать метод getItemId(position) для получения правильного идентификатора ресурса. в вашем ImageAdapter, если вы измените метод getItemId(), чтобы вернуть mThumbsIds[position], а не 0 (как в примере Google).

Однако для достижения вашего результата я предлагаю вам создать новую активность и просто загрузить изображение таким образом.

Например:

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     long imageId = (ImageAdapter)parent.getAdapter.getItemAt(position); 

     Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class); 
     fullScreenIntent.putExtra(thisClassName.class.getName(), imageId); 

     thisClassName.this.startActivity(fullScreenIntent); 
    } 
}); 

Предполагая, что вы создаете файл с full_image.xml макет, содержащий только в ImageView с идентификатором "fullImage", ваш класс FullScreenImage должен выглядеть следующим образом:

public class FullScreenImage extends Activity 
{ 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.full_image); 
     Intent intent = getIntent(); 
     long imageId = intent.getExtras().get(thisClassName.class.getName()); 
     ImageView imageView = (ImageView) v.findViewById(R.id.fullImage); 

     imageView.setLayoutParams(new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT)); 

     imageView.setImageResource(imageId); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    } 
} 

Что-то вдоль них линии должны хорошо работать для вас, с некоторой настройкой. Убедитесь, что вы добавили FullScreenImage в свой файл AndroidManifest.xml как <activity>.

+0

Нужно некоторое редактирование, но я получил суть этого, как только начал. Я, вероятно, должен был начать с чего-то чуть-чуть прыгать в Android: p – Organiccat

+0

Этот код предоставляет класс cast exception – ekjyot

+0

long imageId = (ImageAdapter) parent.getAdapter.getItemAt (position); - эта строка показывает мне несоответствие типа: невозможно преобразовать из MainActivity.ImageAdapter в long –

0

Здесь вы везете идентификатор точки зрения, что было щелкнул (принят в view аргумент) и использовать его, чтобы посмотреть на себя снова:

ImageView imgView = (ImageView) findViewById(view.getId()); 

Это делает нет смысла, тем более, что щелкнуло мнение, видимо, имеет no ID, вызывая findViewById, чтобы вернуть null.

Вы, вероятно, хотите, чтобы передать идентификатор вашего ImageView вместо:

ImageView imgView = (ImageView) findViewById(R.id.whatever_the_id_of_the_image_view_is); 
+0

v это мой ImageView, хотя я дважды проверял в отладчике, и он появляется там нормально, но у него нет MID (который, кажется, является идентификатором, так как это то, что появляется, если я пытаюсь parent.getId(). ImageView - это динамический объект, сгенерированный внутри кода, и является составом данных GridView, если это помогает любому. – Organiccat

+0

Я приближаюсь, теперь изображение становится пустым, и я не получаю сообщение об ошибке. – Organiccat

+0

Поскольку imageView является внутри gridview, мне нужно заменить gridview? – Organiccat

Смежные вопросы