Intereting Posts
Как использовать FirebaseRecyclerAdapter с динамической ссылкой в ​​Android? Как продлить кнопку Android и использовать файл макета xml Android TextToSpeech просто произносит короткие слова вместо произнесения их GPS-долгота и широта от геотегированной фотографии Взлом Android Fragment View State Loss при использовании FragmentTransaction.replace () Есть ли способ связаться со всеми приложениями разработчика Google Play Store? Когда использовать HTML5 в Android? Когда не используете? Android – макет выглядит перепутанным на некоторых устройствах Как создать Raw-сокет в Android? Концепция внутреннего класса Android и Java Приложение неправильно сконфигурировано для входа в систему Facebook с помощью ключа ключа Хэш Google+ signin – handleSignInResult возвращает значение false после настройки кнопки signin Android java.lang.RuntimeException: не удалось создать экземпляр активности ComponentInfo … java.lang.NullPointerException Установка Android-приложения без SD-карты Защитить доступ к URL-адресу API через хэш в приложении Android

Как рисовать линию на изображении вместе с пальцем в android

В моем приложении я хочу нарисовать линию на изображении вместе с finger.I хочу, чтобы результат выглядел следующим образом: Введите описание изображения здесь

На этом экране рыба – это изображение, а красные линии – линии рисования. Поэтому я выполнил следующую ссылку, чтобы разработать приложение http://androidrises.blogspot.in/2012/10/draw-line-on-finger-touch.html. Это мой код:

public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.addphoto); btnAddPhoto=(Button)findViewById(R.id.add); btnEdit=(Button)findViewById(R.id.edit); imageView=(ImageView)findViewById(R.id.photo); btnAddPhoto.setOnClickListener(this); btnEdit.setOnClickListener(this); imageView.setOnTouchListener(this); } @Override public void onWindowFocusChanged(boolean hasFocus){ width=imageView.getWidth(); height=imageView.getHeight(); Log.e("heightttt",""+height); Log.e("Widthhhh",""+width); } @Override public void onClick(View v) { // TODO Auto-generated method stub if(v.equals(btnAddPhoto)){ popup.setVisibility(View.VISIBLE); } if(v.equals(btnEdit)){ bitmap = Bitmap.createBitmap((int) width, (int) height,Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap); paint = new Paint(); paint.setColor(Color.BLACK); imageView.setImageBitmap(bitmap); imageView.setOnTouchListener(this); } } public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: downx = event.getX(); downy = event.getY(); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: upx = event.getX(); upy = event.getY(); canvas.drawLine(downx, downy, upx, upy, paint); imageView.invalidate(); break; case MotionEvent.ACTION_CANCEL: break; default: break; } return true; } 

В этой кодировке всякий раз, когда я запускаю приложение, следующий экран будет открыт.

Введите описание изображения здесь

Затем, используя кнопку добавления, я добавил фотографию из своего gallary.This ниже экрана.

Введите описание изображения здесь

Затем всякий раз, когда я нажимаю кнопку edittool, изображение изображения рыбы исчезает, и я мог бы рисовать строки stright только следующим образом. Но я хочу рисовать линии на изображении вместе с пальцем, как первый экран.

Введите описание изображения здесь

Пожалуйста, кто-нибудь поможет мне. Я новичок в android.Thanks для любой помощи.

Вы должны переопределить метод onDraw вашего представления.

screen_drawing_room.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rlid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout <!--set background for the bottom layout set image here. --> android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="bottom" android:orientation="vertical" android:weightSum="1.0" > <LinearLayout android:id="@+id/view_drawing_pad" <!--your drawing pad on foreground --> android:layout_width="fill_parent" android:layout_height="fill_parent" > </LinearLayout> </LinearLayout> </RelativeLayout 

В ваших действиях onCreate()

 DrawingView mDrawingView=new DrawingView(this); setContentView(R.layout.screen_drawing_room); LinearLayout mDrawingPad=(LinearLayout)findViewById(R.id.view_drawing_pad); mDrawingPad.addView(mDrawingView); 

DrawingView.java

Определите свой DrawingView. Нижеследующее может использоваться для рисования. Измените то же самое, чтобы нарисовать линии, тексты и цвет заливки (закрытая область). Для наводнения Заполните см. Принятый ответ в андроиде ссылок, используя алгоритм заливки заливки, исключающий из памяти исключение .

 class DrawingView extends View { Paint mPaint; //MaskFilter mEmboss; //MaskFilter mBlur; Bitmap mBitmap; Canvas mCanvas; Path mPath; Paint mBitmapPaint; public DrawingView(Context context) { super(context); // TODO Auto-generated constructor stub mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setColor(0xFFFF0000); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(20); mPath = new Path(); mBitmapPaint = new Paint(); mBitmapPaint.setColor(Color.RED); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mBitmap); } @Override public void draw(Canvas canvas) { // TODO Auto-generated method stub super.draw(canvas); canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, mPaint); } private float mX, mY; private static final float TOUCH_TOLERANCE = 4; private void touch_start(float x, float y) { //mPath.reset(); mPath.moveTo(x, y); mX = x; mY = y; } private void touch_move(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 touch_up() { mPath.lineTo(mX, mY); // commit the path to our offscreen mCanvas.drawPath(mPath, mPaint); //mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN)); // kill this so we don't double draw mPath.reset(); // mPath= new Path(); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y); invalidate(); break; case MotionEvent.ACTION_MOVE: touch_move(x, y); invalidate(); break; case MotionEvent.ACTION_UP: touch_up(); invalidate(); break; } return true; } } 

Отобразится вид чертежа. Изучите fingerpaint.java из образца на sdk под графической папкой.

Результат. То, что вы видите в фоновом режиме, – это изображение. На переднем плане я рисую привет. Я рисую линии в угол. Если вы можете разобраться, он красный.

Нарисуйте линии, которые выглядят как граница. Установите ширину обводки для краски, как вам нравится. Аналогичным образом вы можете рисовать линии, если хотите, изменяя координаты x1, y1 и x2, y2.

 Display display = ( (Activity) mcontext).getWindowManager().getDefaultDisplay(); float w = display.getWidth(); float h = display.getHeight(); canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawLine(0, 0, w, 0,mBitmapPaint); canvas.drawLine(0, 0, 0, h,mBitmapPaint); canvas.drawLine(w,h,w,0,mBitmapPaint); canvas.drawLine(w, h, 0,h , mBitmapPaint); 

Введите описание изображения здесь

Редактировать:

Чтобы получить изображение из галереи

 File fp; Drawable d; public void setImagefrmGallery() { // To open up a gallery browser Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"),1); // To handle when an image is selected from the browser, add the following to your Activity } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == 1) { // currImageURI is the global variable I m using to hold the content:// URI of the image Uri currImageURI = data.getData(); System.out.println("Hello======="+getRealPathFromURI(currImageURI)); String s= getRealPathFromURI(currImageURI); File file = new File(s); if (file.exists()) { fp=file.getAbsolutePath(); d = Drawable.createFromPath(file.getAbsolutePath()); mDrawingPad.setBackgroundDrawable(d); } else { System.out.println("File Not Found"); } } } } // And to convert the image URI to the direct file system path of the image file public String getRealPathFromURI(Uri contentUri) { // can post image String [] proj={MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery( contentUri, proj, // Which columns to return null, // WHERE clause; which rows to return (all rows) null, // WHERE clause selection arguments (none) null); // Order-by clause (ascending by name) int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }