Parmağınızı aşağıdaki düz bir çizgi çizmek için Nasıl Android
http://marakana.com/tutorials/android/2d-graphics-example.html
Aşağıda bu örneği kullanıyorum. Ama ben parmaklarımı ekranda çok hızlı hareket satırı tek tek nokta döner.
Çizimi hızlandırmak miyim, emin değilim. Ya da düz bir çizgi ile iki son puan temasa geçeyim. Bu iki çözüm ikinci çok hızlı parmağınızı hareket ne zaman düz bir çizgi sonra keskin eğrileri uzun bölümler olacak dışında iyi bir seçenek gibi görünüyor.
Eğer başka çözümler varsa onları duymak harika olurdu.
Önceden herhangi bir yardım için teşekkürler.
CEVAP
Kolay bir çözümü de belirtildiği gibi, sadece düz bir çizgi ile noktalar bağlamak için. İşte bunu yapmak için kod:
public void onDraw(Canvas canvas) {
Path path = new Path();
boolean first = true;
for(Point point : points){
if(first){
first = false;
path.moveTo(point.x, point.y);
}
else{
path.lineTo(point.x, point.y);
}
}
canvas.drawPath(path, paint);
}
strok için dolgu boya değiştirmek emin olun:
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(Color.WHITE);
Başka bir seçenek quadTo yöntemi kullanarak: iterpolation ile puan bağlayın
public void onDraw(Canvas canvas) {
Path path = new Path();
boolean first = true;
for(int i = 0; i < points.size(); i = 2){
Point point = points.get(i);
if(first){
first = false;
path.moveTo(point.x, point.y);
}
else if(i < points.size() - 1){
Point next = points.get(i 1);
path.quadTo(point.x, point.y, next.x, next.y);
}
else{
path.lineTo(point.x, point.y);
}
}
canvas.drawPath(path, paint);
}
Bu hala bazı keskin kenarları olur.
Eğer gerçekten iddialı iseniz, aşağıdaki gibi kübik eğriler hesaplamak için başlayabilirsiniz
public void onDraw(Canvas canvas) {
Path path = new Path();
if(points.size() > 1){
for(int i = points.size() - 2; i < points.size(); i ){
if(i >= 0){
Point point = points.get(i);
if(i == 0){
Point next = points.get(i 1);
point.dx = ((next.x - point.x) / 3);
point.dy = ((next.y - point.y) / 3);
}
else if(i == points.size() - 1){
Point prev = points.get(i - 1);
point.dx = ((point.x - prev.x) / 3);
point.dy = ((point.y - prev.y) / 3);
}
else{
Point next = points.get(i 1);
Point prev = points.get(i - 1);
point.dx = ((next.x - prev.x) / 3);
point.dy = ((next.y - prev.y) / 3);
}
}
}
}
boolean first = true;
for(int i = 0; i < points.size(); i ){
Point point = points.get(i);
if(first){
first = false;
path.moveTo(point.x, point.y);
}
else{
Point prev = points.get(i - 1);
path.cubicTo(prev.x prev.dx, prev.y prev.dy, point.x - point.dx, point.y - point.dy, point.x, point.y);
}
}
canvas.drawPath(path, paint);
}
Ayrıca, aşağıdaki yinelenen hareket olayları önlemek için değiştirmeniz gerekli buldum:
public boolean onTouch(View view, MotionEvent event) {
if(event.getAction() != MotionEvent.ACTION_UP){
Point point = new Point();
point.x = event.getX();
point.y = event.getY();
points.add(point);
invalidate();
Log.d(TAG, "point: " point);
return true;
}
return super.onTouchEvent(event);
}
ve Point sınıfı için dx ve dy değerlerini ekleyin:
class Point {
float x, y;
float dx, dy;
@Override
public String toString() {
return x ", " y;
}
}
Bu düz çizgileri üretir, ama bazen nokta bir döngü kullanarak bağlayın. Ayrıca, uzun çizim oturumları için, bu hesaplama hesaplamak için yoğun hale gelir.
... Eğlenceli şeyler ile oynamak için yardımcı olur umarım.
Edit
Birlikte hızlı bir proje bu farklı teknikler, Square suggessted imza uygulaması da dahil olmak üzere gösteren attım. Keyfini çıkarın: https://github.com/johncarl81/androiddraw
Nasıl android bir çizgi çizmek için...
Nasıl vurgulama gibi açıklama yapmak, ...
Bir LinearLayout için bir sınır çizmek...
Nasıl css ile noktalı bir çizgi çizmek...
Android TextView altında bir Çizgi çiz...