我在RelativeLayout中有2个ImageView,一个是背景,一个是用户可以缩放和移动并放置在背景之上的图像。我接下来想要将它们结合起来,保留顶部图像的大小和位置。因此,当用户点击保存时,他们会获得一个新图像。这可能吗?我是Android新手处理图片的新手。截至目前,我的代码将它们组合在一起,但是图像2恢复到原始大小,并始终以图像1为中心。
有关从哪里开始的任何建议?我想在扩展后我需要将图像2保存为新的位图。我不确定这个位置吗?
private Bitmap combineBitmap() throws FileNotFoundException {
Drawable bm1New = adding_toFace.getDrawable();
xx = adding_toFace.getTranslationX();
yy = adding_toFace.getTranslationX();
Bitmap newBitmap = null;
int w;
if (bm1.getWidth() >= bm2.getWidth()) {
w = bm1.getWidth();
} else {
w = bm2.getWidth();
}
int h;
if (bm1.getHeight() >= bm2.getHeight()) {
h = bm1.getHeight();
} else {
h = bm2.getHeight();
}
Config config = bm1.getConfig();
if (config == null) {
config = Bitmap.Config.ARGB_8888;
}
newBitmap = Bitmap.createBitmap(w, h, config);
Canvas newCanvas = new Canvas(newBitmap);
newCanvas.drawBitmap(bm1, 0, 0, null);
Paint paint = new Paint();
paint.setAlpha(128);
//int y = adding_toFace.getTop();
//int x = adding_toFace.getLeft();
newCanvas.drawBitmap(bm2, 0, 0, paint);
return newBitmap;
}// combineBitmap
答案 0 :(得分:1)
基本上这个概念只是将视图转换为图像文件, 这样脸部图像可以在布局中进行背景src,而次要图像可以在布局内部,如果你想要图像中显示的按钮,请将按钮移出相对布局就行了。
MainActivity.class
package com.example.atestapp;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
private RelativeLayout relativelayoutview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
relativelayoutview = (RelativeLayout) findViewById(R.id.relativelayoutview);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Bitmap bm = viewToBitmap(relativelayoutview);
Log.i("MainActivity", "bm: "+bm);
saveBitmap(bm);
}
});
}
public Bitmap viewToBitmap(View view) {
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
public void saveBitmap(Bitmap bitmap){
try {
FileOutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() + "/Download/file.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativelayoutview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/smile"
>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/huh"
android:layout_centerVertical="true"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
在manifestx中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:0)
使用ImageView。 位图1作为背景,bitmap2作为src; 此视图上的setTouchListener; 将您所做的任何动作放入矩阵(移动,缩放,旋转...) 通过setImageMatrix()应用于imageView; 最后,通过imageView.getImageMatrix()获取Matrix来完成组合工作。 只是一个想法。