بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پاک کردن خط رسم شده در canvas
سلام مجدد خدمت دوستان و عذر خواهی بابت سوالهای پیاپی . البته این سوالها شاید مشکلات دوستان دیگه هم باشه که امیدوارم با پاسخگویی دوستان عزیز بکار بقیه هم بیاد.
دوستان بنده کدی نوشتم که با تاچ کردن روی صفحه خطوطی رو بر اساس پوزیشن مورد نظر رسم میکنه که کددش به صورت زیر هست . الان میخوام کدی بنویسم که بتونه بعضی از خطها رو پاک کنه. اگر کسی کار کرده ممنون میشم به سوالم جواب بدین. اگر راه حلی هم خودم پیدا کردم جوابش رو خواهم گذاشت
package com.example.amin.drawline1;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity implements View.OnTouchListener{
static int i = 0;
static float static_x = 0;
static float static_y = 0;
static float static_x1 = 0;
static float static_y1 = 0;
ImageView drawingImageView;
private Canvas canvas;
private Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View topLayout = this.findViewById(R.id.layoutmain);
topLayout.setOnTouchListener((View.OnTouchListener) this);
bitmap = Bitmap.createBitmap((int) getWindowManager()
.getDefaultDisplay().getWidth(), (int) getWindowManager()
.getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
drawingImageView = (ImageView) this.findViewById(R.id.DrawingImageView);
drawingImageView.setImageBitmap(bitmap);
String tag = null;
i++;
if (i == 1) {
static_x = event.getX();
static_y = event.getY();
} else {
static_x1 = event.getX();
static_y1 = event.getY();
}
if (i == 2) {
Paint paint = new Paint();
paint.setColor(Color.rgb(255, 153, 51));
paint.setStrokeWidth(4);
canvas.drawLine(static_x, static_y, static_x1, static_y1, paint);
i = 0;
}
return false;
}
}
+1
0
این روش شما که هر لحظه داره یه خط اضافه میکنه به canvas ، این قابلیت رو نداره که یه چیز خاص رو پاک کنه . باید روشی استفاده کنید که هر لحظه کل خط ها رو رسم کنه . برای این کار باید هر چیزی که قراره رسم بشه رو در یک ArrayList بذارید . و از اون استفاده کنید برای رسم . یعنی وقتی تاچ میشه مختصات محل تاچ در آرایه ذخیره بشه و بعد دستور رسک تمام خطوط آرایه رو بدی . و خط بعدی هم دوباره تمام خطوط رسم بشه . یعنی با تاچ ، هر لحظه داره به سایز آرایه اضافه میشه . حالا هر خطی که بخوای رو میتونی از آرایه حذف کنی . (8 سال پیش)
0
0
ممنئن دوست عزیز بابت پاسگوییتان (8 سال پیش)
0
0
اما اگر ازarraylist استفاده کنه خطوط جدید رو دوباره رسم میکنه و خطوط قبلی که پاک نمیشه فقط اون مختصات رو از آرایه حذف میکنه مگر اینکه اکتیویتی ما یجور refresh بشه که اینو چطور باید بهش بگم؟؟؟ (8 سال پیش)
0
0
پروژه باران استاد رو حتما ببینید . شما اگه بخواین یه خط خاصی رو حذف کنید ، مجبورین از این روش آرایه استفاده کنید . الان شما دارین با هر تاچ یه لاین به canvas اضافه میکنید ولی لاین ها رو جایی رو ذخیره نکردین . پس باید لاین ها در یک ArrayList ذخیره بشن . حالا که قراره از این روش ( آرایه ) استفاده بشه ، باید هر دفعه تمام خطوط دوباره رسم بشن . یعنی اگه خط 101 ام اضافه بشه تمام خطوط 1 تا 100 هم باید دوباره رسم بشه . چون شما قراره قابلیت حذف بذارین مجبورید هر دفعه به آرایه سر بزنید تا هرچی داخلش هست رسم بشه . نمیشه بدون رسم مجدد همه خطوط ، بگی مثلا فلان خط رو پاک کن ، چون کلا در canvas پاک کردن نداریم بلکه حذف کردن یه مورد از لیست و ترسیم مجدد همه لیست رو داریم ( که اینطور به نظر شما میاد که خط حذف شده ) . حالا چطوری خط رو حذف میکنی ؟ این دیگه باید بشینی الگوریتم بنویسی براش . مثل قسمت نوت گوشی های گلگسی نوت . که وقتی روی پاک کن کلیک میکنی ، حالت حذف کردن فعال میشه . محل کلیک کاربر رو میگیری و بعد در آرایه جستجو میکنی ببینی نزدیکترین خط به نقطه کدومه . حالا که خط مشخص شد ، یه شرط میذاری که اگه فاصله نقطه از خط کوچکتر از مثلا 8 dip بود از آرایه حذف بشه و دوباره ترسیم کل خط های لیست ، تا نشون بدی خط مورد نظر حذف شده . (8 سال پیش)
0
0
اوکی مرسی از پاسخ کاملتون (8 سال پیش)
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .