`
hm4123660
  • 浏览: 282435 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Dea4ce76-f328-3ab2-b24a-fb268e1eeb75
数据结构
浏览量:69994
社区版块
存档分类
最新评论

xml布局自定义SurfaceView模板

阅读更多

package com.dream.apm;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * Created by HuangZhiLong on 2015/1/22.
 */
public class MySurfaceViewone extends SurfaceView implements SurfaceHolder.Callback,Runnable {

    private Thread th;
    private SurfaceHolder sfh;
    private Canvas canvas;
    private Paint paint;
    private boolean flag;

    public int screenW=0,screenH=0;


    /**
     * SurfaceView初始化函数
     */
    public MySurfaceViewone(Context context, AttributeSet attrs) {
        super(context, attrs);

        this.setKeepScreenOn(true);
        sfh = this.getHolder();
        sfh.addCallback(this);
        paint = new Paint();
        paint.setAntiAlias(true);//消除锯齿
        //paint.setTypeface(Typeface.DEFAULT_BOLD);
        this.setFocusable(true);
        this.setFocusableInTouchMode(true);


    }

    /**
     * SurfaceView视图创建,响应此函数
     */
    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        screenW = this.getWidth();
        screenH = this.getHeight();

        myDraw();

        //tt=new Rect(0,0,this.getWidth(),this.getHeight());
        flag = true;
        th = new Thread(this);
        th.start();

    }
    /**
     * 游戏绘图
     */
    public void myDraw() {
        try {


            canvas = sfh.lockCanvas();
            canvas.drawColor(Color.rgb(90, 151, 161));//背景

            paint.setStrokeWidth(0);
            paint.setColor(Color.BLACK);
            //paint.setTextSize(size);
            //绘制表格


        } catch (Exception e) {

        } finally {
            if (canvas != null)
                sfh.unlockCanvasAndPost(canvas);
        }
    }

    /**
     * 图片的线程运行
     */
    public void run() {
        while (flag) {
            myDraw();

            try {
                Thread.sleep(40);
            } catch (Exception ex) {
                Log.e("ERROR", "Thread is Error!");
            }
        }
    }

    /**
     * 触屏事件监听
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {


        switch (event.getAction())
        {
            //移动
            case MotionEvent.ACTION_MOVE:


                break;
            //按下
            case MotionEvent.ACTION_DOWN:

                break;
            //放开
            case MotionEvent.ACTION_UP:

                break;

        }
        return true;
    }



    /**
     * SurfaceView视图状态发生改变,响应此函数
     */
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        System.out.println("ImageSurfaceView is surfaceChanged");

    }
    /**
     * SurfaceView视图消亡时,响应此函数
     */
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        System.out.println("ImageSurfaceView is surfaceDestroyed");
        flag = false;//停止线程
    }


}

分享到:
评论

相关推荐

    Android MediaPlayer+SurfaceView+自定义控制器实现视频播放demo

    本示例着重讲解如何使用`MediaPlayer`、`SurfaceView`以及自定义控制器来实现这一功能。`MediaPlayer`是Android系统提供的一个核心组件,它允许开发者处理多媒体文件,如音频和视频。`SurfaceView`则是一个特殊的...

    android camera demo,自定义相机实现拍照,自动与手动对焦等功能,android studio项目

    自定义相机界面通常需要创建XML布局文件,包括相机预览区域、按钮(如拍照、切换摄像头、开关闪光灯等)和其他UI元素。` ConstraintLayout`或`RelativeLayout`可以帮助更好地组织和定位这些元素。 9. **权限管理**...

    本地视频播放

    这通常包括播放/暂停按钮、进度条、音量控制等元素,这些可以通过Android的XML布局文件来设计。 3. **事件监听**:为了响应用户的操作,如点击按钮,开发者需要在代码中设置事件监听器。例如,当用户点击播放按钮时...

    Zxing2.zip

    4. **创建扫描界面:**如果选择自定义扫描界面,需要设计XML布局文件,并在对应的Activity中初始化和配置相机。 5. **实现扫描逻辑:**调用ZXing提供的API,如`CaptureActivity`或`IntentIntegrator`,处理扫描事件...

    Android高级应用源码-仿美图秀秀拼图功能zip

    在拼图功能中,开发者可能使用了LinearLayout、RelativeLayout或者GridLayout等布局,根据用户选择的拼图模板动态调整布局参数。 5. **图片资源管理**:“2014-03big”文件可能是一个包含了多种拼图模板的资源文件...

    android做的俄罗斯方块

    2. 项目结构:了解Android项目的目录结构,包括`src/main/java`(存放Java代码)、`res/layout`(XML布局文件)、`res/drawable`(资源图片)等。 二、游戏界面设计 1. XML布局:在`res/layout`目录下,创建`...

    android版简单贪吃蛇小游戏代码

    使用XML布局文件,如`activity_main.xml`,可以定义这些元素的布局和样式。你可以使用`LinearLayout`、`RelativeLayout`或`ConstraintLayout`来组织UI组件。 3. **游戏逻辑**:贪吃蛇的核心逻辑涉及到移动、碰撞...

    Android代码-Snake.zip

    游戏界面通常由自定义的View或布局组成,可以使用XML布局文件描述界面元素。例如,可以创建一个全屏的自定义View,然后在其中添加Snake游戏的画布。 10. **测试与发布** 在开发过程中,使用Android Studio内置的...

    android应用程序开发流程要点.pdf

    - 使用XML布局文件来设计界面,包括TextView(文本显示),EditText(输入框),Button(按钮),ImageView(图片视图),ListView/RecyclerView(列表视图)等。 7. **Android应用程序的工作机制**: - 应用启动...

    android俄罗斯方块

    在Android中,使用XML布局文件来设计游戏界面,通常包括一个SurfaceView用于绘制游戏画面,以及一些Button或TextView用于控制游戏和显示分数。你可以使用自定义View扩展SurfaceView,重写onDraw()方法绘制游戏图形。...

    android贪吃蛇

    1. 使用XML布局文件创建游戏主界面,可以包含一个SurfaceView,作为游戏画面的承载容器。 2. 在SurfaceView中,自定义一个Canvas类,继承自SurfaceHolder.Callback,用于绘制游戏画面和处理游戏逻辑。 三、实现游戏...

    android实战 刮刮卡(android studio源程序工程)

    1. **自定义View**:刮刮卡功能需要自定义一个View类,继承自Android的View或SurfaceView。自定义View允许我们覆盖onDraw()方法,绘制刮刮卡的背景和可刮除的覆盖层。我们还需要处理触摸事件,以便在用户滑动手指时...

    刮图-android小demo

    在Demo_zhy_07_GuaGuaKa_02_path这个文件中,很可能是包含了实现刮刮卡功能的相关代码文件,包括但不限于布局文件(XML)、Java源代码(实现自定义View的类)、资源图片(背景和涂层)等。通过查看和学习这些代码,...

    Android-拼图小游戏

    项目创建完成后,我们需要编写主活动(MainActivity)和对应的布局文件(activity_main.xml)。 在布局文件中,我们可以设计一个自定义View来展示拼图。自定义View类需要继承自View或者SurfaceView,重写onDraw()...

    android坦克大战游戏实例

    使用XML布局文件定义游戏界面,可以使用ImageView显示静态图片,如地图背景,以及自定义View或SurfaceView来绘制动态元素,如坦克和子弹。 三、游戏逻辑实现 1. 坦克移动:通过监听用户的触摸事件,改变坦克的位置...

    android游戏开发教程

    - **布局管理**:线性布局、相对布局、表格布局、绝对布局、单帧布局,帮助开发者构建复杂的游戏界面布局。 - **控件高级应用**:例如,使用ListView实现动态加载的游戏列表,自定义Adapter以增强控件的灵活性和表现...

    二维码扫描Zxing横竖屏都支持,还可以切换激光线

    这通常通过在XML布局文件中使用`android:configChanges="orientation|screenSize"`来实现,并重写`onConfigurationChanged()`方法。 激光线是许多二维码扫描应用中常见的视觉辅助元素,用于帮助用户对准条码。在...

    android播放m3u8示例

    在Android Studio工程中,我们通常会将`VideoView`添加到XML布局文件中,如下所示: ```xml android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` ...

    Android经典游戏:忍者突袭

    每个类都可能继承自特定的Android游戏框架或自定义基类,例如继承自SurfaceView或Canvas,以便进行游戏循环和渲染。 至于游戏的性能优化,开发者可能利用了多线程技术,将游戏逻辑和渲染分开处理,以减少UI线程的...

Global site tag (gtag.js) - Google Analytics