java - studio - imageview xamarin android
onClickListener en la vista de imagen para comenzar una nueva intención (2)
Está poniendo el extra con la clave imageResourceId
pero está tratando de sacarlo con la imagen clave imageFullScreen
. Intenta usar la misma llave en ambos lugares.
Así que estoy tratando de usar un onClickListener para pasar una imagen de una actividad a una nueva actividad, pero no puedo encontrar la manera de hacerlo. Cómo funciona es que la aplicación comienza con una vista de lista donde puede seleccionar un elemento y abre una nueva actividad que muestra cierta información y una imagen a continuación. Quiero poder hacer clic en la imagen para abrirla en una nueva actividad.
Heres my routeDetails.java aquí es donde se encuentra la imagen que quiero hacer clic
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;
}
}
y aquí está el activity_route_details.xml que lo acompaña
<?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>
aquí está mi FullScreenImage.java que quiero que la imagen abra en
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));
}
}
Y aquí está el full_scren_image.xml para ir con eso
<?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>
Usa tu imagen como ByteArray. Esto funcionó para mí sin ningún problema. En su oyente de clic de la actividad del remitente haga lo siguiente,
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);
Y en su actividad de receptor haga lo siguiente.
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));
}
llama a getImage () en tu método oncreate de tu actividad de receptor. El contexto es su contexto de aplicación. Buena suerte:)