gpt4 book ai didi

Android-Textview 在拖动操作时消失

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:21 25 4
gpt4 key购买 nike

我正在创建一个图像编辑应用程序。我在其中提供了打开相机或画廊以选择图片的便利。选择图片后,用户将导航到其他页面。在其他显示图片的页面中,我使用了一个实现了 AppCompactImageView 的 View 。现在,我正在提供使用 edittext 添加文本的便利。单击软键盘的“完成”按钮时,edittext 将消失并被 TextView 取代。现在我想将这个 TextView 拖到整个布局中。但是在 drop 操作之后,它就消失了。下面是我的代码。任何帮助都将不胜感激。

  1. DrawActivity.java

    公共(public)类 DrawActivity 扩展 AppCompatActivity {

    DrawView imgView;
    Button resetBtn, saveBtn;
    ImageButton undoBtn;
    Bundle extras;
    Context context;
    EditText addTxtBox;
    ImageView brushImg, fontImg;
    TextView addedTxtView;
    // LinearLayout mainLinear;
    RelativeLayout mainRelative;
    public int rowX, rowY;
    public String txtVal;
    private android.widget.RelativeLayout.LayoutParams layoutParams;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide();
    setContentView(R.layout.activity_draw);

    context = this.getApplicationContext();

    mainRelative = (RelativeLayout) findViewById(R.id.relativeLayout1);
    imgView = (DrawView) findViewById(R.id.frag_home_iv_main);
    resetBtn = (Button) findViewById(R.id.clearBtn);
    undoBtn = (ImageButton) findViewById(R.id.undoBtn);
    saveBtn = (Button) findViewById(R.id.saveBtn);
    addTxtBox = (EditText) findViewById(R.id.addTxt);
    brushImg = (ImageView) findViewById(R.id.imageBrush);
    fontImg = (ImageView) findViewById(R.id.imageFont);

    addedTxtView = (TextView) findViewById(R.id.drawTextView);
    addedTxtView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
    ClipData.Item item = new ClipData.Item((CharSequence)v.getTag());
    String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};

    ClipData dragData = new ClipData(v.getTag().toString(),mimeTypes, item);
    View.DragShadowBuilder myShadow = new View.DragShadowBuilder(addedTxtView);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Log.d("Vishal sdk","in if");
    v.startDragAndDrop(dragData, myShadow, null, 0);
    } else {
    Log.d("Vishal sdk","in else");
    v.startDrag(dragData, myShadow, null, 0);
    }
    return false;
    }
    });


    addedTxtView.setOnDragListener(new View.OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
    Log.d("Vishal check", String.valueOf(event.getAction()));
    switch(event.getAction()) {
    case DragEvent.ACTION_DRAG_STARTED:
    layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams();
    Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_STARTED");
    return true;
    // Do nothing

    case DragEvent.ACTION_DRAG_ENTERED:
    Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_ENTERED");
    int x_cord = (int) event.getX();
    int y_cord = (int) event.getY();
    return true;

    case DragEvent.ACTION_DRAG_EXITED :
    Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_EXITED");
    x_cord = (int) event.getX();
    y_cord = (int) event.getY();
    layoutParams.leftMargin = x_cord;
    layoutParams.topMargin = y_cord;
    v.setLayoutParams(layoutParams);
    v.setVisibility(View.VISIBLE);
    // view.setVisibility(View.VISIBLE);
    return true;

    case DragEvent.ACTION_DRAG_LOCATION :
    Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_LOCATION");
    x_cord = (int) event.getX();
    y_cord = (int) event.getY();
    return true;

    case DragEvent.ACTION_DRAG_ENDED :
    Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_ENDED");
    return true;
    // Do nothing

    case DragEvent.ACTION_DROP:
    Log.d("Vishal Drag", "ACTION_DROP event");
    /* x_cord = (int) event.getX();
    y_cord = (int) event.getY();
    View view = (View) event.getLocalState();
    view.setX(x_cord - (view.getWidth() / 2));
    view.setY(y_cord - (view.getWidth() / 2));
    view.setVisibility(View.VISIBLE);*/

    return true;
    // Do nothing
    default:
    return true;

    }
    //return true;
    }
    });


    addTxtBox.setImeOptions(EditorInfo.IME_ACTION_DONE);
    addTxtBox.setRawInputType(InputType.TYPE_CLASS_TEXT);

    addTxtBox.setVisibility(View.GONE);
    // addedTxtView.setVisibility(View.GONE);


    extras = getIntent().getExtras();
    imgView.setImageURI(Uri.parse(extras.getString("selectedImg")));

    imgView.setDrawingCacheEnabled(true);

    brushImg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    imgView.setBrushActive(true);
    }
    });

    fontImg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    imgView.setBrushActive(false);
    addTxtBox.setVisibility(View.VISIBLE);
    addTxtBox.requestFocus();
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
    }
    });

    addTxtBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_DONE) {
    Toast.makeText(DrawActivity.this, addTxtBox.getText(), Toast.LENGTH_SHORT).show();
    addedTxtView.setVisibility(View.VISIBLE);
    txtVal = addTxtBox.getText().toString();
    imgView.getTxtValue(addTxtBox.getText().toString());
    addedTxtView.setText(addTxtBox.getText().toString());
    addedTxtView.setTag(addTxtBox.getText().toString());
    addTxtBox.setVisibility(View.GONE);
    try {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(addTxtBox.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
    }catch (Exception e){
    e.printStackTrace();
    }
    return true;
    }
    return false;
    }
    });


    resetBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    imgView.resetPaths();
    }
    });

    undoBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    imgView.removeLastPath();
    }
    });

    saveBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Bitmap bitmap = imgView.getDrawingCache();
    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    path.mkdirs();
    Long tsLong = System.currentTimeMillis()/1000;
    String ts = tsLong.toString();
    File imageFile = new File(path, ts+".png"); // Imagename.png

    try{
    FileOutputStream out = new FileOutputStream(imageFile);
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // Compress Image
    try {
    out.flush();
    out.close();
    } catch (IOException e){
    e.printStackTrace();
    }


    // Tell the media scanner about the new file so that it is
    // immediately available to the user.
    MediaScannerConnection.scanFile(context,new String[] { imageFile.getAbsolutePath() }, null,new MediaScannerConnection.OnScanCompletedListener() {
    public void onScanCompleted(String path, Uri uri) {
    Log.i("ExternalStorage", "Scanned " + path + ":");
    Log.i("ExternalStorage", "-> uri=" + uri);

    }
    });
    Toast.makeText(context,"Saved", Toast.LENGTH_SHORT).show();

    Intent intent = new Intent(DrawActivity.this, MainActivity.class);
    startActivity(intent);
    } catch(FileNotFoundException e) {
    Toast.makeText(context,"Error" + e.toString(), Toast.LENGTH_SHORT).show();
    e.printStackTrace();
    }
    }
    });

    }



    public void redrawImage() {
    Bitmap bm = imgView.getDrawingCache();
    Bitmap proxy = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(proxy);
    Paint paint = new Paint();
    // paint.setStyle(Paint.Style.STROKE);
    paint.setColor(Color.RED);
    paint.setTextSize(100);
    paint.setAntiAlias(true);

    c.drawBitmap(bm, new Matrix(), paint);
    c.drawText(txtVal, imgView.getWidth()+rowX, imgView.getHeight()+rowY, paint);
    imgView.setImageBitmap(proxy);
    }

    public void changeColor(View view) {
    Log.d("Vishal selected color", view.getTag().toString());

    switch (view.getTag().toString()){
    case "red":
    imgView.setBrushColor(Color.RED);
    break;

    case "blue":
    imgView.setBrushColor(Color.BLUE);
    break;

    case "green" :
    imgView.setBrushColor(Color.GREEN);
    break;

    case "yellow":
    imgView.setBrushColor(Color.YELLOW);
    break;

    case "purple":
    imgView.setBrushColor(getResources().getColor(R.color.purple));
    break;

    default:
    imgView.setBrushColor(Color.BLACK);
    }
    //
    }

  2. activity_draw.xml

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black" >

    <ImageButton
    android:id="@+id/undoBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:src="@drawable/undo"/>

    <Button
    android:id="@+id/clearBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Clear"
    android:layout_toLeftOf="@+id/saveBtn"/>

    <Button
    android:id="@+id/saveBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Save"
    android:layout_alignParentRight="true"/>

    </RelativeLayout>

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1.8"
    android:orientation="vertical"
    android:id="@+id/draw_image_linearView">

    <RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.example.mobilesolution.imgedit.DrawView
    android:id="@+id/frag_home_iv_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"/>

    <TextView
    android:id="@+id/drawTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:elevation="100dp"
    android:layout_centerInParent="true"
    android:textColor="@android:color/black"
    android:textSize="16dp"
    />

    <EditText
    android:id="@+id/addTxt"
    android:layout_centerInParent="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:inputType="textMultiLine"
    android:maxLines="3"
    android:elevation="10dp"/>


    </RelativeLayout>

    </RelativeLayout>

    <HorizontalScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="5dp"
    android:scrollbars="none"
    android:layout_weight="0.2">

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
    android:layout_width="447dp"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="horizontal"
    android:padding="10dp">

    <ImageView
    android:id="@+id/redBall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:onClick="changeColor"
    android:src="@drawable/red_ball"
    android:tag="red" />

    <ImageView
    android:id="@+id/blueBall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:onClick="changeColor"
    android:src="@drawable/blue_ball"
    android:tag="blue" />

    <ImageView
    android:id="@+id/greenBall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:onClick="changeColor"
    android:src="@drawable/green_ball"
    android:tag="green" />

    <ImageView
    android:id="@+id/yellowBall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:onClick="changeColor"
    android:src="@drawable/yellow_ball"
    android:tag="yellow" />

    <ImageView
    android:id="@+id/purpleBall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:onClick="changeColor"
    android:src="@drawable/purple_ball"
    android:tag="purple" />

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:src="@drawable/red_ball" />

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:src="@drawable/red_ball" />

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:src="@drawable/red_ball" />

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:src="@drawable/green_ball" />

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:src="@drawable/green_ball" />

    </LinearLayout>
    </LinearLayout>


    </HorizontalScrollView>


    <RelativeLayout
    android:id="@+id/brushBtnLayout"
    android:layout_width="wrap_content"
    android:layout_height="48dp"
    android:background="@android:color/black">

    <ImageView
    android:id="@+id/imageBrush"
    android:layout_width="65dp"
    android:layout_height="37dp"
    android:layout_marginLeft="66dp"
    android:layout_marginStart="66dp"
    android:background="@android:color/white"
    android:src="@drawable/brush"
    android:layout_alignTop="@+id/imageFont"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

    <ImageView
    android:id="@+id/imageFont"
    android:layout_width="65dp"
    android:layout_height="37dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginEnd="52dp"
    android:layout_marginRight="52dp"
    android:background="@android:color/white"
    android:src="@drawable/font" />

    </RelativeLayout>

最佳答案

当拖动存在时,您应该设置 XY 坐标,而不是设置边距。

再次更新 放置 View 是您的 TextView 应该放入的位置。这应该包含拖动监听器

frag_home_iv_main.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
int action = dragEvent.getAction();
View viewdrag = (View) dragEvent.getLocalState();
if(action == DragEvent.ACTION_DRAG_ENTERED){
//do something
}
else if(action == DragEvent.ACTION_DRAG_EXITED){
//do something

Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_EXITED");
x_cord = (int) event.getX();
y_cord = (int) event.getY();
viewdrag .setY(y_cord);
viewdrag .setX(x_cord);
}

else if(action == DragEvent.ACTION_DROP){
//do something
}
return true;
}
});

关于Android-Textview 在拖动操作时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com