带有背景保留功能的拖拽直线

本文介绍了一个使用双缓冲技术实现平滑绘图的例子。通过在后台Image上绘制图形,然后将其显示到屏幕上来避免画面闪烁。代码示例展示了如何在按下、拖动及释放手指时在Canvas上绘制线条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用双缓冲技术,以Image为中间缓冲,然后将Image画在屏幕上
  1. import javax.microedition.lcdui.Canvas;
  2. import javax.microedition.lcdui.Display;
  3. import javax.microedition.lcdui.Graphics;
  4. import javax.microedition.lcdui.Image;
  5. import javax.microedition.midlet.MIDlet;
  6. public class Exec extends MIDlet {
  7.     private Display display;
  8.     public Exec() {
  9.         display = Display.getDisplay(this);
  10.     }
  11.     public void startApp() {
  12.         display.setCurrent(new DrawPanel());
  13.     }
  14.     public void pauseApp() {
  15.     }
  16.     public void destroyApp(boolean unconditional) {
  17.     }
  18. }
  19. class DrawPanel extends Canvas {
  20.     int startX = 0;
  21.     int startY = 0;
  22.     int endX = 0;
  23.     int endY = 0;
  24.     Image image = Image.createImage(getWidth(), getHeight());
  25.     protected void paint(Graphics g) {
  26.         g.drawImage(image, 0, 0, 0);
  27.         g.setColor(0,0,0);
  28.         g.drawLine(startX, startY, endX, endY);
  29.     }
  30.     protected void pointerPressed(int x, int y) {
  31.         startX = x;
  32.         startY = y;
  33.     }
  34.     protected void pointerReleased(int x, int y) {
  35.         endX = x;
  36.         endY = y;       
  37.         Graphics gOfImage = image.getGraphics();
  38.         gOfImage.drawLine(startX, startY, endX, endY);
  39.         repaint();
  40.     }
  41.     protected void pointerDragged(int x, int y) {
  42.         endX = x;
  43.         endY = y;
  44.         repaint();
  45.     }
  46. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值