- 浏览: 2211075 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
大家先看图片:
因为前一段时间在写画图类,刚好有一个线程控制画图闪烁的,我就想说我能不能做一个心形闪烁的,出来的效果就如图,先贴再讲解代码:
里面设置两个类,一个是我们的activity类,这个类用来显示示图,然后建一个继承SurfaceView的类,我们在这里面画图。先贴两个累的代码:
主类名:IaiaiMainActivity,画图类类名:Love.
关于这个程序要讲解的几点:
1. 画图的时候你可以继承View,也可以继承SurfaceView,这两者的区别在于:surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,还有涉及的surfaceCreated(SurfaceHolder holder),surfaceDestroyed(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width, int height)方法,而在SurfaceHolder.Callback 接口回调中可以通过重写来改变这些方法
2.程序其实很简单, 既然生命了Runnable接口,就有相对应的Run方法,在surfaceCreate()的时候开启线程,线程每隔200ms就刷新一次,这样我们看到的效果就是闪烁的,每200毫秒 画一次图,根据经过的间隔时间来设置画笔的颜色,然后通过循环描点,画出心形,然后设置字体大小,画字和字下面的横线。
3.关于心形函数,是从一个例子中看来得,关于x和y的得到,
x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + 320 / 2; y = -r * Math.sin(Math.PI / 45 * j) + 400 / 4;
320是屏幕的宽度,本来竖屏我设置的是480,可是下面得写字,就设置为400的了,关于画更好看的心形还有一个函数,大家可以看下:
因为前一段时间在写画图类,刚好有一个线程控制画图闪烁的,我就想说我能不能做一个心形闪烁的,出来的效果就如图,先贴再讲解代码:
里面设置两个类,一个是我们的activity类,这个类用来显示示图,然后建一个继承SurfaceView的类,我们在这里面画图。先贴两个累的代码:
主类名:IaiaiMainActivity,画图类类名:Love.
package com.iaiai.activity; import android.app.Activity; import android.os.Bundle; /** * * <p> * Title: IaiaiActivity.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-8-11 * </p> * * @author 丸子 * @version 0.0.1 */ public class IaiaiActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Love love = new Love(this); setContentView(love); } }
package com.iaiai.activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Typeface; import android.view.SurfaceHolder; import android.view.SurfaceView; /** * * <p> * Title: Love.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-8-11 * </p> * * @author 丸子 * @version 0.0.1 */ public class Love extends SurfaceView implements SurfaceHolder.Callback, Runnable { boolean mbloop = false; SurfaceHolder mSurfaceHolder = null; private Canvas canvas; int miCount = 0; int y = 50; /** * @param context */ public Love(Context context) { super(context); mSurfaceHolder = this.getHolder(); mSurfaceHolder.addCallback(this); this.setFocusable(true); this.setKeepScreenOn(true); mbloop = true; } /* * (non-Javadoc) * * @see * android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder * , int, int, int) */ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } /* * (non-Javadoc) * * @see * android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder * ) */ @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub new Thread(this).start(); } /* * (non-Javadoc) * * * @seeandroid.view.SurfaceHolder.Callback#surfaceDestroyed(android.view. * SurfaceHolder) */ @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub mbloop = false; } /* * (non-Javadoc) * * @see java.lang.Runnable#run() */ @Override public void run() { // TODO Auto-generated method stub while (mbloop) { try { Thread.sleep(200); } catch (Exception e) { // TODO: handle exception } synchronized (mSurfaceHolder) { Draw(); } } } private void Draw() { // TODO Auto-generated method stub canvas = mSurfaceHolder.lockCanvas(); try { if (mSurfaceHolder == null || canvas == null) { return; } if (miCount < 100) { miCount++; } else { miCount = 0; } Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.BLACK); canvas.drawRect(0, 0, 320, 480, paint); switch (miCount % 6) { case 0: paint.setColor(Color.BLUE); break; case 1: paint.setColor(Color.GREEN); break; case 2: paint.setColor(Color.RED); break; case 3: paint.setColor(Color.YELLOW); break; case 4: paint.setColor(Color.argb(255, 255, 181, 216)); break; case 5: paint.setColor(Color.argb(255, 0, 255, 255)); break; default: paint.setColor(Color.WHITE); break; } int i, j; double x, y, r; for (i = 0; i <= 90; i++) { for (j = 0; j <= 90; j++) { r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j)) * 20; x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + 320 / 2; y = -r * Math.sin(Math.PI / 45 * j) + 400 / 4; canvas.drawPoint((float) x, (float) y, paint); } } paint.setTextSize(32); paint.setTypeface(Typeface.create(Typeface.SERIF, Typeface.ITALIC)); RectF rect = new RectF(60, 400, 260, 405); canvas.drawRoundRect(rect, (float) 1.0, (float) 1.0, paint); canvas.drawText("Loving You", 75, 400, paint); mSurfaceHolder.unlockCanvasAndPost(canvas); } catch (Exception e) { } } }
关于这个程序要讲解的几点:
1. 画图的时候你可以继承View,也可以继承SurfaceView,这两者的区别在于:surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,还有涉及的surfaceCreated(SurfaceHolder holder),surfaceDestroyed(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width, int height)方法,而在SurfaceHolder.Callback 接口回调中可以通过重写来改变这些方法
2.程序其实很简单, 既然生命了Runnable接口,就有相对应的Run方法,在surfaceCreate()的时候开启线程,线程每隔200ms就刷新一次,这样我们看到的效果就是闪烁的,每200毫秒 画一次图,根据经过的间隔时间来设置画笔的颜色,然后通过循环描点,画出心形,然后设置字体大小,画字和字下面的横线。
3.关于心形函数,是从一个例子中看来得,关于x和y的得到,
x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + 320 / 2; y = -r * Math.sin(Math.PI / 45 * j) + 400 / 4;
320是屏幕的宽度,本来竖屏我设置的是480,可是下面得写字,就设置为400的了,关于画更好看的心形还有一个函数,大家可以看下:
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 649本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1122颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 1016从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1194Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1037Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 856前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 948监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 812在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 992最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1356##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1149当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 808setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1538问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 792底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1799点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1393import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2354TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1588一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 891Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 947最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
在Android中,我们主要使用Canvas类来进行图形绘制。Canvas提供了各种方法,如drawRect(), drawCircle(), drawPath()等,用于在Bitmap上绘制几何形状、线条和路径。在这个项目中,我们可能会看到一个自定义View类,...
首先,我们要了解Android中的`Paint`类。`Paint`是Android图形系统的核心部分,用于定义绘制图形时的颜色、样式和效果。通过设置`Paint`对象的属性,我们可以控制线条的宽度、颜色、透明度、抗锯齿效果、字体样式等...
在JavaScript中,我们可以利用Canvas API来实现各种复杂的图形操作,包括鼠标画图和线程画线。本教程将深入探讨如何使用Canvas进行这些功能。 首先,创建一个Canvas元素非常简单,只需在HTML中添加一个`<canvas>`...
SketchView利用Android的`Canvas`和`Matrix`类来处理所有的图形绘制和变换操作。Canvas是Android图形系统的基础,可以用来在屏幕上绘制各种形状和图片;而Matrix则用于对图形进行旋转、缩放、平移等变换。 2. **...
2. **自定义View**:在Android中,为了实现交互式画图,通常需要创建自定义的`View`类,重写`onDraw()`方法,在这里调用`Canvas`的绘图方法进行实际的绘制工作。同时,还需要处理触摸事件(`MotionEvent`),以便...
- Android的`Canvas`类:它是Android图形系统的核心,用于在`Bitmap`上进行绘制操作,如画线、矩形、圆形等。 - `Path`对象:用于创建和管理复杂的绘图路径,支持直线、曲线等。 - `Paint`对象:定义了绘制的颜色...
在Android中,`Canvas`类是用于在屏幕上绘制的基本对象。通过`onDraw()`方法,你可以利用`Canvas`进行绘图操作,如画线、填充形状等。同时,`SurfaceView`是一种优化的视图,适用于高性能的图形绘制,如游戏或实时...
本篇文章将深入解析“Android代码-画图工具源码.zip”中的关键知识点,帮助开发者理解和构建自己的Android画图应用。 1. **SurfaceView**:Android画图工具的核心是SurfaceView,它是一个可以显示连续动画或处理高...
- SurfaceView是Android中的一个特殊视图,它提供了在单独的线程上进行渲染的能力,这对于高性能的图形操作,如画图应用,非常关键。SurfaceView可以确保画图操作不会阻塞UI线程,提高应用的响应速度。 2. **...
在Android中,颜色可以通过ARGB(Alpha, Red, Green, Blue)格式表示。开发者可以使用`Color`类提供的静态方法来创建颜色,例如`Color.argb()`,或者直接使用十六进制颜色代码。颜色的动态变化可能是通过定时器或...
- 在Android中,画图功能通常通过继承自`View`类来实现,创建一个自定义的`DrawView`,重写`onDraw()`方法,在这里进行绘图操作。 3. **Canvas和Paint对象**: - `Canvas`是画布,用于绘制图形。开发者可以在`...
首先,让我们探讨一下Android中的画图机制。Android提供了一个名为`Canvas`的类,它是绘画的基础,允许开发者在`Bitmap`或`Surface`上绘制图形。`Canvas`提供了各种方法,如`drawRect`, `drawCircle`, `drawLine`, `...
在Android平台上,开发一个画图板应用涉及到许多关键的技术点,包括用户交互、图形渲染、数据存储以及资源管理等。以下是对"基于Android系统的画图板"这一主题的详细解析: 1. **用户交互**:Android系统提供了丰富...
在2016年的这个系列教程中,我们将重点探讨如何在Android中利用Canvas和Drawable进行图形绘制。 首先,你需要了解`Canvas`类,它是Android画图的核心。`Canvas`提供了在Bitmap上绘制各种形状和图像的方法,如线、圆...
Canvas是Android中用于在Bitmap上进行绘图的对象。通过Canvas,我们可以绘制线条、形状、文本、图像等元素。Canvas提供了各种绘图方法,如`drawLine()`、`drawRect()`、`drawCircle()`、`drawText()`等。 2. **...
- `Canvas`是Android中用于在Bitmap或屏幕表面绘制的基本类。它提供了多种绘图方法,如`drawRect()`, `drawCircle()`, `drawText()`等。 - `Paint`对象则用于设置图形的样式,如颜色、线条宽度、文字样式等。它...
Android中利用画图类和线程画出闪烁的心形,送给亲爱的他 android自带的示例程序 BluetoothChat 变蓝牙串口助手(内含DIY蓝牙遥控车附源码实例教程) Android高手过招 FAQ 网友收集的android开发书籍(可下载哦)...
1. **主线程与UI线程**:Android应用程序的UI更新必须在主线程(UI线程)中进行,因此,画图操作也需要在这个线程内执行。如果需要频繁或长时间的绘图,应该使用SurfaceView或者OpenGL ES来避免阻塞主线程。 2. **...
4. **触控事件处理**: 在Android中,`MotionEvent`类用于处理触摸屏幕产生的事件。在画图应用中,你需要监听`ACTION_DOWN`, `ACTION_MOVE`, `ACTION_UP`等事件,根据手指的按下、移动和抬起来追踪绘画路径。通过对每...
1. **自定义View**:在Android中,自定义View通常是为了实现特定的用户交互或视觉效果。在这个画图程序中,`CustomDrawView`会重写`onTouchEvent`方法来处理用户的触摸输入。当用户触摸屏幕时,程序会记录下触点的...