Я новичок ie в android студии, и мы делаем групповой проект об дополненной реальности в моей школе. Я пытаюсь добавить кнопку, которая позволит вам рисовать все, что вы хотите, на экране, где используется AR - я использовал учебник, но он не имел ничего общего с AR, только рисование. Я добавил кнопку, которая запускает мое рисование на экране AR, но когда я щелкаю по нему, открывается новый экран AR, который позволяет рисовать, но, поскольку это новый экран, скажем, если я вставил модель в предыдущий экран исчезает. Что я должен сделать, чтобы предотвратить это?
Моя активность Paint
public class PaintActivity extends AppCompatActivity {
private PaintView paintView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_paint);
paintView = (PaintView) findViewById(R.id.paintView);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
paintView.init(metrics);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.paintmenu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.normal:
paintView.normal();
return true;
case R.id.clear:
paintView.clear();
return true;
}
return super.onOptionsItemSelected(item);
}
}
Мой класс PaintView
public class PaintView extends View {
public static int BRUSH_SIZE = 10;
public static final int DEFAULT_COLOR = Color.RED;
public static final int DEFAULT_BG_COLOR = Color.TRANSPARENT;
private static final float TOUCH_TOLERANCE = 4;
private float mX, mY;
private Path mPath;
private Paint mPaint;
private ArrayList<FingerPath> paths = new ArrayList<>();
private int currentColor;
private int backgroundColor = DEFAULT_BG_COLOR;
private int strokeWidth;
private Bitmap mBitMap;
private Canvas mCanvas;
private Paint mBitMapPaint = new Paint(Paint.DITHER_FLAG);
public boolean emboss;
public boolean blur;
public PaintView(Context context) {
this(context,null);
}
public PaintView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(DEFAULT_COLOR);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setXfermode(null);
mPaint.setAlpha(0xff);
}
public void init(DisplayMetrics metrics){
int height = metrics.heightPixels;
int width = metrics.widthPixels;
mBitMap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitMap);
currentColor = DEFAULT_COLOR;
strokeWidth = BRUSH_SIZE;
}
public void normal(){
emboss = false;
blur = false;
}
public void clear(){
backgroundColor = DEFAULT_BG_COLOR;
paths.clear();
normal();
invalidate();
}
@Override
protected void onDraw(Canvas canvas){
canvas.save();
mCanvas.drawColor(backgroundColor);
for(FingerPath fp : paths){
mPaint.setColor(fp.color);
mPaint.setStrokeWidth(fp.strokeWidth);
mPaint.setMaskFilter(null);
mCanvas.drawPath(fp.path, mPaint);
}
canvas.drawBitmap(mBitMap,0,0,mBitMapPaint);
canvas.restore();
}
private void touchStart( float x, float y){
mPath = new Path();
FingerPath fp = new FingerPath(currentColor, strokeWidth, mPath);
paths.add(fp);
mPath.reset();
mPath.moveTo(x,y);
mX = x;
mY = y;
}
private void touchMove(float x, float y){
float dx = Math.abs( x - mX );
float dy = Math.abs( y - mY );
if( dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE){
mPath.quadTo(mX,mY,(x+mX)/2, (y+mY)/2);
mX = x;
mY = y;
}
}
private void touchUp(){
mPath.lineTo(mX,mY);
}
@Override
public boolean onTouchEvent(MotionEvent event){
float x = event.getX();
float y = event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
touchStart(x,y);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
touchMove(x,y);
invalidate();
break;
case MotionEvent.ACTION_UP:
touchUp();
invalidate();
break;
}
return true;
}
}
Мой класс FingerPath просто инициализирует цветную заливку и путь, я полагаю Не думаю, что это связано с проблемой.
ARScreen xml
<?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"
tools:context=".ARScreen">
<fragment
android:id="@+id/arFragment"
android:name="com.google.ar.sceneform.ux.ArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
<ImageView
android:id="@+id/pencil"
android:layout_width="53dp"
android:layout_height="54dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="96dp"
android:layout_marginTop="592dp"
android:layout_marginEnd="262dp"
android:layout_marginBottom="13dp"
app:srcCompat="@android:drawable/ic_menu_edit" />
<ImageView
android:id="@+id/screenshot"
android:layout_width="54dp"
android:layout_height="49dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="10dp"
android:layout_marginTop="595dp"
android:layout_marginEnd="347dp"
android:layout_marginBottom="16dp"
app:srcCompat="@android:drawable/ic_menu_camera" />
</RelativeLayout>
Наконец, PaintActivity xml
<?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"
tools:context=".PaintActivity">
<fragment
android:id="@+id/arFragment"
android:name="com.google.ar.sceneform.ux.ArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
<ImageView
android:id="@+id/pencil1"
android:layout_width="53dp"
android:layout_height="54dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="96dp"
android:layout_marginTop="592dp"
android:layout_marginEnd="262dp"
android:layout_marginBottom="13dp"
app:srcCompat="@android:drawable/ic_menu_edit" />
<ImageView
android:id="@+id/screenshot1"
android:layout_width="54dp"
android:layout_height="49dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="10dp"
android:layout_marginTop="595dp"
android:layout_marginEnd="347dp"
android:layout_marginBottom="16dp"
app:srcCompat="@android:drawable/ic_menu_camera" />
<com.example.artie10.PaintView
android:id="@+id/paintView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>