Я пытаюсь взять фотографию из галереи и отредактировать ее в моем виде чертежа. Я пытаюсь сделать ластик в режиме PorterDuff, но для этого мне нужно 2 растровых изображения, одно - мой ластик, а другое - изображение, которое я импортировал из галереи. Дело в том, что я импортировал изображение в свою активность здесь:
package com.example.digitaldesign;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
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;
public class createObject extends AppCompatActivity {
ViewGroup mainLayout;
ImageView imageview;
Button addfromgal;
private int xDelta;
private int yDelta;
private static final int IMAGE_PICK_CODE = 1000;
private static final int PERMISSION_CODE = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.createobjectlyt);
mainLayout = findViewById(R.id.createobjectlyt);
imageview = findViewById(R.id.image_view);
addfromgal = findViewById(R.id.addGal);
addfromgal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE};
requestPermissions(permissions, PERMISSION_CODE);
} else {
pickImageFromGallery();
}
}
else{
pickImageFromGallery();
}
}
});
imageview.setOnTouchListener(onTouchListener());
}
private View.OnTouchListener onTouchListener() {
return new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
final int x = (int) event.getRawX();
final int y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams)
imageview.getLayoutParams();
xDelta = x - lParams.leftMargin;
yDelta = y - lParams.topMargin;
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
imageview.getLayoutParams();
layoutParams.leftMargin = x - xDelta;
layoutParams.topMargin = y - yDelta;
layoutParams.rightMargin = layoutParams.rightMargin + x;
layoutParams.bottomMargin = layoutParams.bottomMargin +y;
imageview.setLayoutParams(layoutParams);
break;
}
imageview.invalidate();
return true;
}
};
}
private void pickImageFromGallery() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, IMAGE_PICK_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case PERMISSION_CODE:{
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
pickImageFromGallery();
}
else{
Toast.makeText(this,"Permission denied!",Toast.LENGTH_SHORT).show();
}
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (resultCode == RESULT_OK && requestCode == IMAGE_PICK_CODE){
imageview.setImageURI(data.getData());
}
}
}
Изображение в данный момент находится в просмотре изображений, но я могу превратить его в растровое изображение, но в этом действии. Вопрос в том, как перенести это растровое изображение в мой чертежный вид (код ниже):
package com.example.digitaldesign;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
public class createObjectLayout extends View {
Bitmap tshirt;
Bitmap fromGal;
public createObjectLayout(Context context, AttributeSet attrs) {
super(context, attrs);
setBackgroundResource(R.drawable.wall);
tshirt = BitmapFactory.decodeResource(getResources(),R.drawable.tshirt);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect trect = new Rect();
trect.set(50,50,1050,1350 );
canvas.drawBitmap(tshirt,null,trect,null);
}
}
Растровое изображение из Gal должно содержать изображение из галереи. Можете ли вы сказать мне, какой лучший способ сделать это?