2016-11-15 2 views
0

Итак, я пытаюсь использовать onClickListener для передачи изображения из одного действия в новое действие, но я не могу понять, как это сделать. Как это работает, приложение начинается с списка, в котором вы можете выбрать элемент, и он открывает новое действие, которое отображает некоторую информацию и изображение ниже. Я хочу, чтобы иметь возможность щелкнуть изображение, чтобы открыть его в новом действии.onClickListener on imageview, чтобы начать новое намерение

Heres мой routeDetails.java это где изображение, которое я хочу нажать расположен

package com.example.zach.listview; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.TextView; 

import static com.example.zach.listview.R.id.image; 


public class RouteDetails extends AppCompatActivity { 

TouchImageView routeImage; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_route_details); 

    //back button for route details view 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    //TextView for route details 
    final TextView routeDetailsView = (TextView) findViewById(R.id.routeDetailsView); 
    routeDetailsView.setText(getIntent().getExtras().getString("route")); 

    //ImageView for route details 
    routeImage = (TouchImageView) findViewById(R.id.routeImage); 
    routeImage.setImageResource(getIntent().getIntExtra("imageResourceId", 0)); 


////////// Trying to pass image to new activity 

    routeImage.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) 
     { 
      int imageId = (int) image.getResourceId(i, -1); 

      Intent intent = new Intent(v.getContext(),  FullScreenImage.class); 
      intent.putExtra("imageResourceId", imageId); 
      startActivity(intent); 
     } 

    }); 

//////////// 

} 

//back button for route details view 
@Override 
public boolean onSupportNavigateUp(){ 
    finish(); 
    return true; 
} 

} 

и Херес activity_route_details.xml, который идет с ним

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/scrollView1" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_route_details" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.zach.listview.RouteDetails"> 



<TextView 
    android:text="TextView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/routeDetailsView" 
    android:textSize="18sp" 
    android:textAlignment="center" /> 

<com.example.zach.listview.TouchImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/routeImage" 
    android:scaleType="fitCenter" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:adjustViewBounds="false" 
    android:layout_below="@+id/routeDetailsView"/> 

</RelativeLayout> 
</ScrollView> 

ЭРВО мой FullScreenImage.java что Я хочу, чтобы изображение было открыто в

package com.example.zach.listview; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

/** 
* Created by Zach on 11/15/2016. 
*/ 

public class FullScreenImage extends AppCompatActivity { 

TouchImageView routeImage; 

@Override 
protected void onCreate(Bundle saveInstanceState){ 
    super.onCreate(saveInstanceState); 
    setContentView(R.layout.full_screen_image); 

    routeImage = (TouchImageView) findViewById(R.id.fullScreenImageView); 
    routeImage.setImageResource(getIntent().getIntExtra("imageFullScreen",  0)); 
} 



} 

И heres the full_scren_image.x мл, чтобы пойти с ним

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<com.example.zach.listview.TouchImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:srcCompat="@+id/routeImage" 
    android:id="@+id/fullScreenImageView" 
    android:layout_weight="1" /> 
</LinearLayout> 

ответ

0

Ты ставишь в дополнительном с ключом imageResourceId, но вы пытаетесь вытащить его с помощью ключа imageFullScreen. Попробуйте использовать один и тот же ключ в обоих местах.

+0

Я изменил это, и он все еще не работает – user4297729

0

Используйте свое изображение как ByteArray. Это сработало для меня без проблем. В своем прослушивателе кликов активности отправителя выполните следующие действия:

Intent senderint = new Intent(context, receiveractivity.class); 
Bitmap bitmap = drawableToBitmap(view.getBackground()); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] b = baos.toByteArray(); 
senderint.putExtra("myimage", b); 
startActivity(senderint); 

И в вашей деятельности приемника сделайте следующее.

private void getImage(){ 
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View v = null; 
v = inflater.inflate(R.layout.receiverlayout, null); 

ViewGroup vg = (ViewGroup) findViewById(R.id.yourmainlayout); 
Bundle bundle = getIntent().getExtras(); 
byte[] ba = bundle.getByteArray("myimage"); 
Bitmap bm = BitmapFactory.decodeByteArray(ba, 0, ba.length()); 
Drawable dr = new BitmapDrawable(getResources, bm); 
vg.setBackground(dr); 
vg.addView(v, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
} 

вызов getImage() в вашем методе oncreate активности вашего приемника. Контекст - это ваш контекст приложения. Удачи :)

+0

спасибо, есть ли более простой способ передать изображение? например, используя putextra, как изображение передается из моего основного вида деятельности в детали маршрута. Могу ли я сделать то же самое, чтобы передать изображение из данных маршрута в полноэкранное изображение? – user4297729

+0

Я не могу придумать более простой способ. Я передаю изображение как byte [] дополнительные функции здесь. Но вместо того, чтобы раздувать новый макет, вы можете просто получить дополнительные функции и преобразовать их в растровое изображение и использовать его в качестве фона или всего, что вам нужно сделать в соответствии с вашими потребностями. Да, вы также можете использовать его на обратной стороне, добавив дополнительные функции и получить дополнительные функции, переключив действия отправителя и получателя. Надеюсь, я поняла. –

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