首页 > 其他分享 >Android中实现双缓冲(画板应用)和XML文件定义菜单

Android中实现双缓冲(画板应用)和XML文件定义菜单

时间:2023-06-12 15:32:17浏览次数:39  
标签:XML case Log 画板 break paint import Android android


1.什么是双缓冲技术?双缓冲技术就是当用户操作界面完成后,会有一个缓冲区保存用户操作的结果。

为什么要使用双缓冲技术?拿Android 游戏开发来说,界面贞每次都是全部重画的,也就说画了新的,旧的就没了,所以需要使用双缓冲技术保存之前的内容。

如何实现双缓冲?使用一个Bitmap对象保留之前的画布即可。

01
package com.example.phonegaptest;
02

03
import android.content.Context;
04
import android.graphics.Bitmap;
05
import android.graphics.Bitmap.Config;
06
import android.graphics.Canvas;
07
import android.graphics.Color;
08
import android.graphics.Paint;
09
import android.graphics.Path;
10
import android.util.AttributeSet;
11
import android.view.MotionEvent;
12
import android.view.View;
13

14
public class DrawView extends View {
15
    float preX;
16
    float preY;
17
    private Path path;
18
    public Paint paint = null;
19
    final int VIEW_WIDTH = 320;
20
    final int VIEW_HEIGHT = 480;
21
    Bitmap cacheBitmap = null;//定义一个内存中的图片,这张图片会作为缓冲区
22
    Canvas cacheCanvas = null;//定义cacheBitmap上的画布cacheCanvas
23

24
    public DrawView(Context context, AttributeSet set) {
25
        super(context, set);
26
        cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT,
27
                Config.ARGB_8888);//创建缓冲区
28
        cacheCanvas = new Canvas();
29

30
        path = new Path();
31
        cacheCanvas.setBitmap(cacheBitmap);
32

33
        paint = new Paint(Paint.DITHER_FLAG);
34
        paint.setColor(Color.RED);
35
        paint.setStyle(Paint.Style.STROKE);
36
        paint.setStrokeWidth(1);
37
        paint.setAntiAlias(true);
38
        paint.setDither(true);
39
    }
40

41
    @Override
42
    public boolean onTouchEvent(MotionEvent event) {
43
        float x = event.getX();
44
        float y = event.getY();
45

46
        switch (event.getAction()) {
47
        case MotionEvent.ACTION_DOWN:
48
            path.moveTo(x, y);
49
            preX = x;
50
            preY = y;
51
            break;
52
        case MotionEvent.ACTION_MOVE:
53
            path.quadTo(preX, preY, x, y);
54
            preX = x;
55
            preY = y;
56
            break;
57
        case MotionEvent.ACTION_UP:
58
            cacheCanvas.drawPath(path, paint);
59
            path.reset();
60
            break;
61
        }
62
        invalidate();
63
        return true;//返回true表明处理方法已经处理该事件,该事件不会扩散
64
    }
65

66
    @Override
67
    protected void onDraw(Canvas canvas) {
68
        super.onDraw(canvas);
69
        Paint bmpPaint = new Paint();
70
        canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
71
        canvas.drawPath(path, paint);
72
    }
73

74
}


2.XMl文件实现菜单功能





XMl文件如下:



<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android" >  
    <item  
        android:id="@+id/close"  
        android:icon="@drawable/ic_launcher"  
        android:orderInCategory="3"  
        android:title="Close"/>  
    <item  
        android:id="@+id/no_icon"  
        android:orderInCategory="2"  
        android:title="Sans Icon"/>  
    <item  
        android:id="@+id/disabled"  
        android:enabled="true"  
        android:orderInCategory="4"  
        android:title="Disabled"/>  
    <!-- orderInCategory表示的是item的排序-->  
    <group  
        android:id="@+id/other_stuff"  
        android:menuCategory="secondary"  
        android:visible="true" >  
        <item  
            android:id="@+id/later"  
            android:orderInCategory="0"  
            android:title="2nd-To-Last"/>  
        <item  
            android:id="@+id/last"  
            android:orderInCategory="1"  
            android:title="Last"/>  
    </group>  
    <!--表示的是二级菜单-->  
    <item  
        android:id="@+id/submenu"  
        android:orderInCategory="3"  
        android:title="A Submenu">  
        <menu>  
            <item  
                android:id="@+id/non_ghost"  
                android:alphabeticShortcut="n"  
                android:title="Non-Ghost"  
                android:visible="true"/>  
            <item  
                android:id="@+id/ghost"  
                android:alphabeticShortcut="g"  
                android:title="A Ghost"  
                android:visible="true"/>  
        </menu>  
    </item>  
  
</menu>



主文件



package com.example.receiveractivity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
  
 
public class ReceiverActivity extends Activity {  
    /** Called when the activity is first created. */  
    private static final String TAG="BruceZhang";  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_receiver);  
  
    }  
  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // TODO Auto-generated method stub  
        MenuInflater mflater=new MenuInflater(this);  
        mflater.inflate(R.menu.activity_receiver, menu);  
        return super.onCreateOptionsMenu(menu);  
    }  
  
    @Override  
    public boolean onOptionsItemSelected(MenuItem item) {  
        // TODO Auto-generated method stub  
        switch(item.getItemId()){  
        case R.id.close:  
            Log.v(TAG, "------------close");  
            break;  
        case R.id.no_icon:  
            Log.v(TAG, "------------noicon");  
            break;  
        case R.id.submenu:  
            Log.v(TAG, "------------submenu");  
            break;  
        case R.id.non_ghost:  
            Log.v(TAG, "------------non_ghost");  
            break;  
        case R.id.ghost:  
            Log.v(TAG, "------------ghost");  
            break;  
        case R.id.disabled:  
            Log.v(TAG, "------------disabled");  
            break;  
        case R.id.last:  
            Log.v(TAG, "------------last");  
            break;  
        case R.id.later:  
            Log.v(TAG, "------------laster");  
            break;  
        default:  
            break;  
        }  
        return super.onOptionsItemSelected(item);  
    }  
      
      
      
  
}






标签:XML,case,Log,画板,break,paint,import,Android,android
From: https://blog.51cto.com/brucezhang/6462987

相关文章

  • Android自动化随机测试工具-Monkey简介
    Monkey简介Monkey的名字是有何而来的呢?这个没有去怎么考究,Monkey这个工具就是一个调皮的猴子,在App中乱按、乱摸、乱滚、乱跳。Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设......
  • Unity-Android真机调试
    一、调试准备开发者模式(准备一部安卓机并且打开开发者模式:一般是多次重复点击版本号打开)开启USB调试(一般是在开发选项里面,把USB调试打开即可)   二、环境配置1.添加AndroidBuildSupport模块2.切换Android平台并且设置Build参数 3.设置Project......
  • mybatis-config.xml配置文件有顺序限制
    Thecontentofelementtype"configuration"mustmatch"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".......
  • SSM框架 使用逆向工程生成Bean、XxxMapper 和XxxMapper.xml【MyBatis Generator 】
    在properties配置文件中,数据库用户名的键不能设为username,你随便改个其他的应该都可以,例如jdbc.username,甚至拼错usernaem都可以jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8jdbc.u......
  • Java XML教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介XML是一种简单的基于文本的语言,旨在以纯文本格式存储和传输数据。它代表可扩展标记语言。JavaXML入门教程-从基本到高级概念的简单步骤了解JavaXML,其中包括概述,JavaXML解析器,DOM解析器,解析XML文档,查询XML文档,创建XML文档,修改XML文档,SAX解析器,JDOMXMLParser,StAXP......
  • 基于android 的化石泡样控制系统
    本文通过对市场上使用频率较高的APP调查,并对调查结果做出需求分析后,确定了基于Android的化石泡系统控制的APP的实现。并对UI的概念以及在进行手机应用界面设计时的规则和规范进行了理论的阐述和分析。真正的做到了理论和实践相结合。本设计的框架为Android系统,客户端界面由其相关......
  • 基于android的校园社区APP设计
    本课题介绍的是一款基于Android平台开发的校园论坛的手机应用软件的设计和实现。在该应用的开发中,为了满足用户联系老朋友、结交新朋友的需求,并且可以买卖闲置物品的要求。该应用基本具备了所有社交类应用软件中常见的用户管理、消息管理、推送管理以及检索管理等基本功能。在此......
  • Android中Activity的启动模式
    Android中Activity的启动模式一共有4种,分别是standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来指定启动模式。1、standard在standard模式下,每当启动一个新的Activity,他就会在返回栈中入栈,并处于......
  • XML代码的编写(一)
    XML代码的编写(一)XML概念Extensible Markup Language,翻译过来为可扩展标记语言。Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发布的XML1.0规范。学习XML的目的在现实生活中大量存在有关系的数据,如下图所示  这样的数据如何交给计算机处理呢?,XML语言......
  • java 聚合项目--pom.xml配置文件
    java聚合项目1.parent--pom.xml配置文件4.0.0<groupId>org.test.java.vip.train</groupId><artifactId>test-train-parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules>&l......