Android自动手绘,Android实现手绘功能

本文实例为大家分享了android实现手绘功能的具体代码,供大家参考,具体内容如下

布局文件如下

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.administrator.main.drawactivity">

android:id="@+id/iv"

android:layout_width="1200px"

android:layout_height="1500px"

android:layout_alignparentleft="true"

android:layout_alignparentright="true"

android:layout_alignparentstart="true" />

android:id="@+id/linearlayout4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignparentbottom="true"

android:layout_gravity="center_horizontal"

android:orientation="horizontal">

android:id="@+id/btn_resume"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignparentbottom="true"

android:layout_alignparentend="true"

android:layout_marginend="79dp"

android:text="重绘" />

android:id="@+id/btn_save"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignbottom="@+id/linearlayout4"

android:layout_marginstart="91dp"

android:layout_toendof="@+id/linearlayout4"

android:text="保存" />

activity代码如下,其中线的颜色,宽度等属性都可以修改。

package com.example.administrator.main;

import android.content.intent;

import android.graphics.bitmap;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.paint;

import android.net.uri;

import android.os.environment;

import android.support.v7.app.appcompatactivity;

import android.os.bundle;

import android.view.motionevent;

import android.view.view;

import android.widget.button;

import android.widget.imageview;

import android.widget.toast;

import java.io.file;

import java.io.fileoutputstream;

public class drawactivity extends appcompatactivity {

private imageview iv;

private bitmap basebitmap;

private button btn_resume;

private button btn_save;

private canvas canvas;

private paint paint;

float radio;

@override

protected void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

setcontentview(r.layout.activity_draw);

radio = 10;

iv = (imageview) findviewbyid(r.id.iv);

// 初始化一个画笔,笔触宽度为5,颜色为红色

paint = new paint();

paint.setstrokewidth(radio);

paint.setcolor(color.black);

iv = (imageview) findviewbyid(r.id.iv);

btn_resume = (button) findviewbyid(r.id.btn_resume);

btn_save = (button) findviewbyid(r.id.btn_save);

btn_resume.setonclicklistener(click);

btn_save.setonclicklistener(click);

iv.setontouchlistener(touch);

}

private view.ontouchlistener touch = new view.ontouchlistener() {

// 定义手指开始触摸的坐标

float startx;

float starty;

@override

public boolean ontouch(view v, motionevent event) {

switch (event.getaction()) {

// 用户按下动作

case motionevent.action_down:

// 第一次绘图初始化内存图片,指定背景为白色

if (basebitmap == null) {

basebitmap = bitmap.createbitmap(iv.getwidth(),

iv.getheight(), bitmap.config.argb_8888);

canvas = new canvas(basebitmap);

canvas.drawcolor(color.white);

}

// 记录开始触摸的点的坐标

startx = event.getx();

starty = event.gety();

break;

// 用户手指在屏幕上移动的动作

case motionevent.action_move:

// 记录移动位置的点的坐标

float stopx = event.getx();

float stopy = event.gety();

thread t = new thread(new runnable() {

@override

public void run() {

radio += 0.1;

try {

thread.sleep(1000);

} catch (interruptedexception e) {

e.printstacktrace();

}

}

});

t.start();

paint.setstrokewidth(radio);

//根据两点坐标,绘制连线

canvas.drawline(startx, starty, stopx, stopy, paint);

// 更新开始点的位置

startx = event.getx();

starty = event.gety();

// 把图片展示到imageview中

iv.setimagebitmap(basebitmap);

break;

case motionevent.action_up:

radio = 5;

break;

default:

break;

}

return true;

}

};

private view.onclicklistener click = new view.onclicklistener() {

@override

public void onclick(view v) {

switch (v.getid()) {

case r.id.btn_save:

savebitmap();

break;

case r.id.btn_resume:

resumecanvas();

break;

default:

break;

}

}

};

/**

* 保存图片到sd卡上

*/

protected void savebitmap() {

try {

// 保存图片到sd卡上

string filename = "/sdcard/"+system.currenttimemillis() + ".png";

file file = new file(filename);

fileoutputstream stream = new fileoutputstream(file);

basebitmap.compress(bitmap.compressformat.png, 100, stream);

toast.maketext(drawactivity.this, "保存图片成功", toast.length_short).show();

// android设备gallery应用只会在启动的时候扫描系统文件夹

// 这里模拟一个媒体装载的广播,用于使保存的图片可以在gallery中查看

intent intent = new intent();

intent.setaction(intent.action_media_mounted);

intent.setdata(uri.fromfile(environment

.getexternalstoragedirectory()));

sendbroadcast(intent);

} catch (exception e) {

toast.maketext(drawactivity.this, "保存图片失败", toast.length_short).show();

e.printstacktrace();

}

}

// 手动清除画板的绘图,重新创建一个画板

protected void resumecanvas() {

if (basebitmap != null) {

basebitmap = bitmap.createbitmap(iv.getwidth(),

iv.getheight(), bitmap.config.argb_8888);

canvas = new canvas(basebitmap);

canvas.drawcolor(color.white);

iv.setimagebitmap(basebitmap);

toast.maketext(drawactivity.this, "清除画板成功,可以重新开始绘图", toast.length_short).show();

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.example.linchartdemo.view; import java.util.List; import android.R.color; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.util.AttributeSet; import android.util.Log; import android.view.View; public class ZXView extends View { private List<Integer> xlist;// X坐标标签 private List<Integer> ylist;// Y坐标标签 private List<Integer> params;// 参数集合 private Paint paint; private Paint paintLines; private Paint paintArc; private Paint paintText; private int textsize = 20; private float Xoffset = 0;// X轴偏移或叫间隔 private float Yoffset = 0;// Y轴偏移或叫间隔 public float XSpac = 50; public float Xspac = 50; public float YSpac = 50; public float rightXspac = 50; public float rightYspac = 50; public float circleRadius = 10; private float lastX = -1; private float lastY = -1; public ZXView(Context context, List<Integer> xlists, List<Integer> ylists, List<Integer> paramss) { super(context); xlist = xlists; ylist = ylists; params = paramss; initWidget(); } public ZXView(Context context, AttributeSet attrs) { super(context, attrs); initWidget(); } public ZXView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initWidget(); } public void initViewData(List<Integer> xlists, List<Integer> ylists, List<Integer> paramss) { xlist = xlists; ylist = ylists; params = paramss; } @Override protected void onDraw(Canvas canvas) { drawXY(canvas); drawLine(canvas); super.onDraw(canvas); } public void updataUI() { invalidate(); } /** * 画折线 * * @param canvas */ private void drawLine(Canvas canvas) { Xoffset = ((getWidth()) - 20) / (xlist.size()); Yoffset = (getHeight()) / (ylist.size()); Log.i("texts", "X=" + Xoffset + "Y=" + Yoffset); float rulerOffset = 0; if (xlist.size() < 2) throw new IllegalArgumentException("the params argument is <2"); else rulerOffset = (xlist.get(1) - xlist.get(0)); if (params == null && params.size() <= 0) throw new IllegalArgumentException("the params is null or 0"); // Paint p = new Paint(); // p.setAntiAlias(true); // p.setTextSize(25); // p.setColor(Color.WHITE); // canvas.drawText("KW", 10 + Xoffset, 20, p); for (int i = 0; i < params.size(); i++) { int param = params.get(i); float histigramHight = param * (Yoffset / rulerOffset); float currentX = (Xoffset * i + Xspac + 5); float currentY = (getHeight() - YSpac - histigramHight); canvas.drawCircle(currentX, currentY, circleRadius, paintArc); if (lastX != -1) { canvas.drawLine(lastX, lastY, currentX, currentY, paintLines); } lastX = currentX; lastY = currentY; } // 重置lastX跟Y lastX = -1; lastY = -1; } /** * 画坐标轴 * * @param canvas */ private void drawXY(Canvas canvas) { canvas.drawLine(XSpac, 0, XSpac, getHeight() - 5 - XSpac, paint);// x canvas.drawLine(XSpac, getHeight() - XSpac, getWidth(), getHeight() - XSpac, paint);// y canvas.drawLine(getWidth(), 0, getWidth() - 1, getWidth() - YSpac, paint);// 右边Y float yoffset = getHeight() / ylist.size(); float xoffset = (getWidth() - XSpac) / xlist.size(); // 画字 for (int i = 0; i < ylist.size(); i++) { canvas.drawText(ylist.get(i) + "", 0, getHeight() - yoffset * i - YSpac, paintText); } for (int i = 0; i < xlist.size(); i++) { canvas.drawText(xlist.get(i) + "", XSpac + xoffset * i, getHeight() - YSpac + textsize, paintText); } // for (int i = 0; i < ylist.size(); i++) { // for (int j = 0; j < 50; j++) { // canvas.drawLine(XSpac + j * 303, yoffset * i - YSpac, XSpac + j // * 30 + 20, yoffset * i - YSpac, paint); // } // } } /** * 初始化画笔 */ private void initWidget() { paint = new Paint(); paint.setColor(Color.parseColor("#999999")); paint.setTypeface(Typeface.DEFAULT); paint.setAntiAlias(true); paint.setStrokeWidth(2); paintLines = new Paint(); paintLines.setColor(Color.parseColor("#00B4EA")); paintLines.setTypeface(Typeface.DEFAULT); paintLines.setAntiAlias(true); paintLines.setStrokeWidth(3); paintArc = new Paint(); paintArc.setColor(Color.parseColor("#EBEEEF")); paintArc.setTypeface(Typeface.DEFAULT); paintArc.setAntiAlias(true); paintArc.setStrokeWidth(2); paintText = new Paint(); // paintText.setColor(Color.parseColor("#ffffff")); paintText.setTypeface(Typeface.DEFAULT); paintText.setAntiAlias(true); paintText.setStrokeWidth(2); paintText.setTextSize(textsize); } }
Android高德手绘是一种地展示技术,它通过模拟手绘的方式呈现地信息。在Android平台上,高德地提供了手绘功能,用户可以通过调用相应的API接口来实现Android高德手绘功能主要通过定制绘制的方式来展示地。用户可以在地上绘制自己所需的形,例如标记、线条、多边形等,从而更加直观地展示地理信息。另外,手绘还支持多样化的样式与绘制特效,方便用户根据自己的需求进行个性化的地展示和交互。 使用Android高德手绘功能,用户可以根据业务需求绘制各种自定义的地元素。例如,在导航应用中,可以通过手绘在地上绘制路线,以更加清晰地指导用户的行进方向。在旅游应用中,可以利用手绘绘制景点和路线,方便用户查看和规划行程。此外,还可以通过手绘实现一些特殊的效果,例如高亮显示某个区域或者以动画的形式展示地上的数据变化。 总的来说,Android高德手绘是一种方便而灵活的地展示方式,可以根据用户的需求进行个性化的地绘制和展示。无论是导航、旅游、还是其他应用场景,手绘都可以提升用户体验,增加地信息的可视化程度,使地更加生动有趣。Android高德手绘的出现为开发者提供了更多样化的地展示选择,为用户带来更好的地使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值