bozinho Ответов: 2

Нарисуйте линию на ощупь (android)


Что я хочу сделать, так это нарисовать линию, которая будет следовать за моим пальцем на телефоне android...Как я могу это сделать? Пожалуйста помочь
Я работаю в Eclipse.

ridoy

Это не код, дающий место.вам нужно показать нам, что вы пробовали или с какой проблемой столкнулись?

2 Ответов

Рейтинг:
2

Member 13879168

Нарисуйте линию на прикосновении пальца
Есть много приложений в Android, которые вы можете использовать, чтобы нарисовать что-то на экране. Это простое приложение, которое будет рисовать прямую линию на экране между прикосновением, которое вы начали, и последней точкой вашего прикосновения.

Это приложение будет использовать класс Bitmap, Canvas и Paint.

Класс Bitmap охватывает некоторые распространенные методы обработки и загрузки растровых объектов таким образом, чтобы компоненты пользовательского интерфейса (UI) оставались отзывчивыми и не превышали лимит памяти приложения.

Класс Canvas содержит вызовы DRAW. Чтобы нарисовать что-то, вам нужны четыре основных компонента: растровое изображение для хранения пикселей, холст для размещения вызовов draw (запись в растровое изображение), примитив рисования (например, Rect, Circle) и краска (для описания цветов и стилей для рисования).

Класс Paint содержит информацию о стиле и цвете рисования геометрических фигур, текста и растровых изображений.

1. Дизайн Экрана:

activity_touch_draw.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />
 
</RelativeLayout>


Изображение будет использоваться в качестве чертежной доски, а ваш палец будет работать как карандаш. Прямая линия будет проведена от начального касания до конечной точки, где пользователь потянет вверх палец.

TouchDraw.java
package app.test;
 
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
 
public class Test extends Activity implements OnTouchListener {
  ImageView imageView;
  Bitmap bitmap;
  Canvas canvas;
  Paint paint;
  float downx = 0, downy = 0, upx = 0, upy = 0;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    imageView = (ImageView) this.findViewById(R.id.ImageView);
 
    Display currentDisplay = getWindowManager().getDefaultDisplay();
    float dw = currentDisplay.getWidth();
    float dh = currentDisplay.getHeight();
 
    bitmap = Bitmap.createBitmap((int) dw, (int) dh,
        Bitmap.Config.ARGB_8888);
    canvas = new Canvas(bitmap);
    paint = new Paint();
    paint.setColor(Color.GREEN);
    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;<a href=""></a>[<a href="" target="_blank">^</a>]
    default:
      break;
    }
    return true;
  }
}



Прежде всего вам нужно будет знать, что такое ширина и высота вашего экрана. Вам понадобится объект класса Display, чтобы получить подробную информацию о экране. Класс дисплея предоставляет информацию о размере и плотности дисплея.

Display currentDisplay = getWindowManager().getDefaultDisplay();
float dw = currentDisplay.getWidth();
float dh = currentDisplay.getHeight();


currentDisplay объект будет провайдером отображения ширины и высоты.
растровый объект будет иметь заданную ширину и высоту.
объект будет использоваться для функции рисования класс. Ваша фактическая линия будет рисовать на холсте.
рисовать объект будет фактически линией на холсте.

Наконец, пользователь нарисует на экране линию, коснувшись объекта ImageView. Итак, я установил OnTouchListener на объект ImageView.

OnTouchListener-это определение интерфейса для обратного вызова, вызываемого при отправке события касания в представление.

метод onTouch вызывается, когда событие касания отправляется в представление. Это позволяет слушателям получить возможность ответить перед целевым представлением.
public boolean onTouch(View v, MotionEvent event)

v - это объект класса View, из которого отправляется касание.
событие-это объект MotionEvent, содержащий полную информацию о событии


int action = event.getAction();


getAction() возвращает тип выполняемого действия. В течение всего процесса рисования линии на ощупь многие действия будут называться подобными.

ACTION_DOWN
ACTION_MOVE
ACTION_CANCEL
Выполняется

Итак, мне нужно нарисовать линию, начинающуюся от действия под названием ACTION_DOWN до действия ACTION_UP. Я взял начиная с х &амп; координата Y, где ACTION_DOWN действий и снова у меня получаются конечные х &амп; координата Y, когда действие выполняется называется. Наконец, я использовал метод drawLine() класса Canvas для рисования прямой линии.


Maciej Los

6 лет слишком поздно!

Рейтинг:
18

ridoy

Смотрите некоторые обсуждения и код здесь...я думаю, что это поможет вам сделать это, если вы правильно следуете ему.
http://stackoverflow.com/questions/4300399/android-drawing-a-line-to-follow-your-finger[^]
https://groups.google.com/forum/?fromgroups#!тема/android-разработчики/yBbBaUDH1XI[1-25][^]
http://stackoverflow.com/questions/7701340/android-touch-drawing[^]