Je souhaite afficher mes 3 images dans ces images qui sont transparentes à l'intérieur. mais j'ai utilisé 3 vues d'image pour montrer mes images à l'intérieur d'eux. le problème est qu'ils ne viennent pas exactement dans les cadres mais ils vont dans la trame suivante pour remplir la largeur et la hauteur de la vue de l'image. ici je joins mon fichier xml ainsi que le fichier java. Je ne sais pas quoi utiliser pour que mes images s'y fixent. Le masquage est l'option ou autre chose?Les images dans les vues sont superposées
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true">
</android.support.v7.widget.RecyclerView>
<RelativeLayout
android:id="@+id/imgContainer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@+id/recycler_view"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/save_layout">
<ImageView
android:id="@+id/leftside"
android:layout_width="128dp"
android:layout_height="320dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:scaleType="matrix" />
<ImageView
android:id="@+id/middle"
android:layout_width="128dp"
android:layout_height="320dp"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_toRightOf="@+id/leftside"
android:scaleType="matrix" />
<ImageView
android:id="@+id/rightside"
android:layout_width="128dp"
android:layout_height="320dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:scaleType="matrix" />
<ImageView
android:id="@+id/imgframe"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</RelativeLayout>
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import com.squareup.picasso.Picasso;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import droidninja.filepicker.FilePickerBuilder;
import droidninja.filepicker.FilePickerConst;
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;
public class DisplayActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
public static final int RC_WRITE_PERMISSION = 12;
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
private static final int EXTERNAL_CAMERA_PERMISSION_CONSTANT = 100;
protected static InterstitialAd mInterstitialAd;
RecyclerView horizontal_recycler_view;
HorizontalAdapter horizontalAdapter;
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
PointF startPoint = new PointF();
PointF midPoint = new PointF();
float oldDist = 1f;
int mode = NONE;
ImageView leftside, rightside, middleside;
String currentImage = "";
RelativeLayout imgContainer;
AlertDialog.Builder builder;
ImageView mImage;
File sdImageMainDirectory;
int click = 0;
ArrayList<String> filePaths = new ArrayList<>();
ArrayList<Spacecraft> spacecrafts = new ArrayList<>();
private float[] lastEvent = null;
private float d = 0f;
private float newRot = 0f;
private int REQUEST_CAMERA = 1, SELECT_FILE = 5;
private String userChoosenTask;
private boolean left, right, middle = false;
private int leftClickCount = 0;
private int rightClickCount = 0;
private int middleClickCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
InterstitialAdmob();
horizontal_recycler_view = (RecyclerView) findViewById(R.id.recycler_view);
horizontalAdapter = new HorizontalAdapter(Utils.sThumbs, this);
LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(DisplayActivity.this, LinearLayoutManager.HORIZONTAL, false);
horizontal_recycler_view.setLayoutManager(horizontalLayoutManager);
horizontal_recycler_view.setAdapter(horizontalAdapter);
Bundle bdl = getIntent().getExtras();
int index = bdl.getInt("Index");
mImage = (ImageView) findViewById(R.id.imgframe);
mImage.setImageResource(Utils.mThumbIds[index]);
imgContainer = (RelativeLayout) findViewById(R.id.imgContainer);
leftside = (ImageView) findViewById(R.id.leftside);
rightside = (ImageView) findViewById(R.id.rightside);
middleside = (ImageView) findViewById(R.id.middle);
rightside.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView rightside = (ImageView) v;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
startPoint.set(event.getX(), event.getY());
mode = DRAG;
lastEvent = null;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(midPoint, event);
mode = ZOOM;
}
lastEvent = new float[4];
lastEvent[0] = event.getX(0);
lastEvent[1] = event.getX(1);
lastEvent[2] = event.getY(0);
lastEvent[3] = event.getY(1);
d = rotation(event);
break;
case MotionEvent.ACTION_UP:
if (rightClickCount == 0) {
right = true;
left = false;
}
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
lastEvent = null;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// ...
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - startPoint.x,
event.getY() - startPoint.y);
} else if (mode == ZOOM && event.getPointerCount() == 2) {
float newDist = spacing(event);
matrix.set(savedMatrix);
if (newDist > 10f) {
float scale = newDist/oldDist;
matrix.postScale(scale, scale, midPoint.x,
midPoint.y);
}
if (lastEvent != null) {
newRot = rotation(event);
float r = newRot - d;
matrix.postRotate(r, rightside.getMeasuredWidth()/2,
rightside.getMeasuredHeight()/2);
}
}
break;
}
rightside.setImageMatrix(matrix);
return true;
}
private float rotation(MotionEvent event) {
double delta_x = (event.getX(0) - event.getX(1));
double delta_y = (event.getY(0) - event.getY(1));
double radians = Math.atan2(delta_y, delta_x);
return (float) Math.toDegrees(radians);
}
@SuppressLint("FloatMath")
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return (float) Math.sqrt(x * x + y * y);
}
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x/2, y/2);
}
});
middleside.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView middleside = (ImageView) v;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
startPoint.set(event.getX(), event.getY());
mode = DRAG;
lastEvent = null;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(midPoint, event);
mode = ZOOM;
}
lastEvent = new float[4];
lastEvent[0] = event.getX(0);
lastEvent[1] = event.getX(1);
lastEvent[2] = event.getY(0);
lastEvent[3] = event.getY(1);
d = rotation(event);
break;
case MotionEvent.ACTION_UP:
if (middleClickCount == 0) {
right = false;
left = false;
middle = true;
}
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
lastEvent = null;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// ...
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - startPoint.x,
event.getY() - startPoint.y);
} else if (mode == ZOOM && event.getPointerCount() == 2) {
float newDist = spacing(event);
matrix.set(savedMatrix);
if (newDist > 10f) {
float scale = newDist/oldDist;
matrix.postScale(scale, scale, midPoint.x,
midPoint.y);
}
if (lastEvent != null) {
newRot = rotation(event);
float r = newRot - d;
matrix.postRotate(r, middleside.getMeasuredWidth()/2,
middleside.getMeasuredHeight()/2);
}
}
break;
}
middleside.setImageMatrix(matrix);
return true;
}
private float rotation(MotionEvent event) {
double delta_x = (event.getX(0) - event.getX(1));
double delta_y = (event.getY(0) - event.getY(1));
double radians = Math.atan2(delta_y, delta_x);
return (float) Math.toDegrees(radians);
}
@SuppressLint("FloatMath")
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return (float) Math.sqrt(x * x + y * y);
}
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x/2, y/2);
}
});
leftside.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView leftside = (ImageView) v;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
startPoint.set(event.getX(), event.getY());
mode = DRAG;
lastEvent = null;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(midPoint, event);
mode = ZOOM;
}
lastEvent = new float[4];
lastEvent[0] = event.getX(0);
lastEvent[1] = event.getX(1);
lastEvent[2] = event.getY(0);
lastEvent[3] = event.getY(1);
d = rotation(event);
break;
case MotionEvent.ACTION_UP:
if (leftClickCount == 0) {
left = true;
right = false;
}
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
lastEvent = null;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// ...
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - startPoint.x,
event.getY() - startPoint.y);
} else if (mode == ZOOM && event.getPointerCount() == 2) {
float newDist = spacing(event);
matrix.set(savedMatrix);
if (newDist > 10f) {
float scale = newDist/oldDist;
matrix.postScale(scale, scale, midPoint.x,
midPoint.y);
}
if (lastEvent != null) {
newRot = rotation(event);
float r = newRot - d;
matrix.postRotate(r, leftside.getMeasuredWidth()/2,
leftside.getMeasuredHeight()/2);
}
}
break;
}
leftside.setImageMatrix(matrix);
return true;
}
private float rotation(MotionEvent event) {
double delta_x = (event.getX(0) - event.getX(1));
double delta_y = (event.getY(0) - event.getY(1));
double radians = Math.atan2(delta_y, delta_x);
return (float) Math.toDegrees(radians);
}
@SuppressLint("FloatMath")
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return (float) Math.sqrt(x * x + y * y);
}
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x/2, y/2);
}
});
}
public Bitmap takeSnap() {
imgContainer.setDrawingCacheEnabled(true);
imgContainer.buildDrawingCache();
Bitmap bitmap = imgContainer.getDrawingCache();
return bitmap;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case FilePickerConst.REQUEST_CODE:
if (resultCode == RESULT_OK && data != null) {
filePaths = data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_PHOTOS);
Spacecraft s;
try {
for (String path : filePaths) {
s = new Spacecraft();
s.setUri(Uri.fromFile(new File(path)));
spacecrafts.add(s);
}
setImages();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private void setImages() {
Picasso.with(this).load(spacecrafts.get(0).getUri()).into(leftside);
Picasso.with(this).load(spacecrafts.get(1).getUri()).into(middleside);
Picasso.with(this).load(spacecrafts.get(2).getUri()).into(rightside);
}
public class HorizontalAdapter extends RecyclerView.Adapter<HorizontalAdapter.MyViewHolder> {
Integer[] horizontalList;
Context context;
public HorizontalAdapter(Integer[] horizontalList, Activity context) {
this.horizontalList = horizontalList;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.imageView.setImageResource(horizontalList[position]);
}
@Override
public int getItemCount() {
return horizontalList.length;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public MyViewHolder(View view) {
super(view);
imageView = view.findViewById(R.id.recycle_image);
}
mImage.setImageResource(Utils.mThumbIds[getAdapterPosition()]);
takeSnap();
}
});
}
}
}
}
Donnez plus d'informations sur votre code, sur les mises en page ... –
essayer d'utiliser la disposition linéaire par l'orientation de jeu ** coller ** – Karthik
horizontal conception de votre code xml ici –