import android.os.Bundle; import android.app.Activity; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new ApplicationView(this)); } }
import android.view.View; import android.content.Context; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Canvas; public class ApplicationView extends View { Paint paint = new Paint(); // , static float density; public ApplicationView(Context context) { super(context); density = getResources().getDisplayMetrics().density; this.setBackgroundColor(Color.GRAY); // paint.setStrokeWidth(5*density); // 5dp } @Override protected void onDraw(Canvas canvas) { } }
Canvas canvas; // Bitmap image; // float zoom = 500; // Point position = new Point(50, 50); //
image = Bitmap.createBitmap(500, 500, Config.ARGB_4444); // canvas = new Canvas(image); // canvas.drawColor(Color.WHITE); //
canvas.translate(position.x, position.y); // canvas.scale(zoom / 500, zoom / 500); // canvas.drawBitmap(image, 0, 0, paint); //
<activity android:name=".MainActivity" android:label="@string/title_activity_main" android:screenOrientation="landscape">
<resources> <style name="AppTheme" parent="android:Theme.Light.NoTitleBar.Fullscreen" /> </resources>
<resources> <style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar.Fullscreen" /> </resources>
<resources> <style name="AppTheme" parent="android:Theme.DeviceDefault.Light.NoActionBar.Fullscreen" /> </resources>
ArrayList<Finger> fingers = new ArrayList<Finger>(); // , @Override public boolean onTouchEvent(MotionEvent event) { int id = event.getPointerId(event.getActionIndex()); // int action = event.getActionMasked(); // if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) fingers.add(event.getActionIndex(), new Finger(id, (int)event.getX(), (int)event.getY())); else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) fingers.remove(fingers.get(event.getActionIndex())); // , else if(action == MotionEvent.ACTION_MOVE){ for(int n = 0; n < fingers.size(); n++){ // fingers.get(n).setNow((int)event.getX(n), (int)event.getY(n)); } //checkGestures(); invalidate(); } return true; }
import android.graphics.Point; public class Finger { public int ID; // public Point Now; public Point Before; boolean enabled = false; // public Finger(int id, int x, int y){ ID = id; Now = Before = new Point(x, y); } public void setNow(int x, int y){ if(!enabled){ enabled = true; Now = Before = new Point(x, y); }else{ Before = Now; Now = new Point(x, y); } } }
canvas.restore(); // for(int i = 0; i < fingers.size(); i++){ // canvas.drawCircle(fingers.get(i).Now.x, fingers.get(i).Now.y, 40 * density, paint); }
public void checkGestures(){ Finger point = fingers.get(0); // position.x += point.Now.x - point.Before.x; // position.y += point.Now.y - point.Before.y; }
Finger point = fingers.get(0); if(fingers.size() > 1){ // Multitouch // (now) (before) float now = checkDistance(point.Now, fingers.get(1).Now); float before = checkDistance(point.Before, fingers.get(1).Before); float oldSize = zoom; // zoom = Math.max(now - before + zoom, density * 25); // position.x -= (zoom - oldSize) / 2; // position.y -= (zoom - oldSize) / 2; }else{ // position.x += point.Now.x - point.Before.x; position.y += point.Now.y - point.Before.y; }
static float checkDistance(Point p1, Point p2){ // return FloatMath.sqrt((p1.x - p2.x)*(p1.x - p2.x)+(p1.y - p2.y)*(p1.y - p2.y)); }
handler.postDelayed(longPress, 1000);
Runnable longPress = new Runnable() { public void run() { } };
import android.graphics.Point; public class Finger { public int ID; public Point Now; public Point Before; public long wasDown; boolean enabled = false; public boolean enabledLongTouch = true; Point startPoint; public Finger(int id, int x, int y){ wasDown = System.currentTimeMillis(); ID = id; Now = Before = startPoint = new Point(x, y); } public void setNow(int x, int y){ if(!enabled){ enabled = true; Now = Before = startPoint = new Point(x, y); }else{ Before = Now; Now = new Point(x, y); if(ApplicationView.checkDistance(Now, startPoint) > ApplicationView.density * 25) enabledLongTouch = false; } } }
if(fingers.size() > 0 && fingers.get(0).enabledLongTouch){ fingers.get(0).enabledLongTouch = false; drawingMode = !drawingMode; vibrator.vibrate(80); }
vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
<uses-permission android:name="android.permission.VIBRATE"/>
vibrator.vibrate(80);
Finger finger = fingers.get(0); if(fingers.size() > 1){ float now = checkDistance(finger.Now, fingers.get(1).Now); float before = checkDistance(finger.Before, fingers.get(1).Before); if(!drawingMode){ float oldSize = zoom; zoom = Math.max(now - before + zoom, density * 25); position.x -= (zoom - oldSize) / 2; position.y -= (zoom - oldSize) / 2; }else paint.setStrokeWidth(paint.getStrokeWidth() + (now - before) / 8); }else{ if(!drawingMode){ position.x += finger.Now.x - finger.Before.x; position.y += finger.Now.y - finger.Before.y; }else{ float x1 = (finger.Before.x-position.x)*500/zoom; // float x2 = (finger.Now.x-position.x)*500/zoom; // float y1 = (finger.Before.y-position.y)*500/zoom; // float y2 = (finger.Now.y-position.y)*500/zoom; canvas.drawLine(x1, y1, x2, y2, paint); // canvas.drawCircle(x1, y1, paint.getStrokeWidth() / 2, paint); // canvas.drawCircle(x2, y2, paint.getStrokeWidth() / 2, paint); cursor = finger.Now; } }
if(drawingMode){ int old = paint.getColor(); // paint.setColor(Color.GRAY); // canvas.drawCircle((cursor.x-position.x)*500/zoom, (cursor.y-position.y)*500/zoom, paint.getStrokeWidth() / 2, paint); // paint.setColor(old); // }
int id = event.getPointerId(event.getActionIndex()); int action = event.getActionMasked(); if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) fingers.add(event.getActionIndex(), new Finger(id, (int)event.getX(), (int)event.getY())); else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP){ Finger finger = fingers.get(event.getActionIndex()); // // 100, 200, // 25dp if(System.currentTimeMillis() - finger.wasDown < 100 && finger.wasDown - lastTapTime < 200 && finger.wasDown - lastTapTime > 0 && checkDistance(finger.Now, lastTapPosition) < density * 25){ // } lastTapTime = System.currentTimeMillis(); // lastTapPosition = finger.Now; // fingers.remove(fingers.get(event.getActionIndex())); }else if(action == MotionEvent.ACTION_MOVE){ for(int n = 0; n < fingers.size(); n++){ fingers.get(n).setNow((int)event.getX(n), (int)event.getY(n)); } checkGestures(); } return true;
Builder builder = new AlertDialog.Builder(getContext()); String[] items = {"", "", "", "", "", "", "", ""}; final AlertDialog dialog = builder.setTitle(" ").setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { int[] colors = {Color.RED, Color.GREEN, Color.BLUE, 0xFF99CCFF, Color.BLACK, Color.WHITE, Color.YELLOW, 0xFFFFCC99}; paint.setColor(colors[which]); } }).create(); dialog.show();
Source: https://habr.com/ru/post/154193/
All Articles