被绘制的内容响应用户的交互,简单的看就是绘制内容的状态在用户操作时发生了变化。
对于在SurfaceView中绘制的内容,如果我们希望文字可以水平移动,看看我们可以做些什么来实现这样的效果?首先,为了让例子简单,我们从XML文件中的Button接收用户的操作。然后在Activity中让自定义的View做我们所希望的状态变化,前提是获得自定义View的引用和为其添加操作接口。最后,在MyView中改变文字的X坐标来实现文字位置的改变,需要刷新(动态或静态),本例选择动态刷新。
1、布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/button_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左" /> <Button android:id="@+id/button_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="右" /> <com.test.MyView android:id="@+id/my_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout
说明:
- 为了简化,我们从XML文件中放置按钮,接收用户的操作事件。
- 给MyView指定ID,为了后面可以获得其引用。
2、在Activity中添加用户点击按钮操作
public class MainActivity extends Activity implements OnClickListener { private Button btnLeft; private Button btnRight; private MyView myView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); myView = (MyView) findViewById(R.id.my_view); btnLeft = (Button) findViewById(R.id.button_left); btnRight = (Button) findViewById(R.id.button_right); btnLeft.setOnClickListener(this); btnRight.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_left: myView.left(); break; case R.id.button_right: myView.right(); break; default: break; } } }
说明:
- 左移文字:myView.left();
- 右移文字:myView.right();
3、给MyView添加行为和属性
public class MyView extends SurfaceView implements Callback, Runnable { private Paint mPaint; private SurfaceHolder mSurfaceHolder; private Thread mThread; private float x = 10; private void initial() { mPaint = new Paint(); mPaint.setAntiAlias(true); this.setKeepScreenOn(true); mPaint.setColor(Color.RED); mThread = new Thread(this); mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); } public MyView(Context context) { super(context); initial(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); initial(); } public void left() { x = x - 5; } public void right() { x = x + 5; } private void draw() { Canvas mCanvas = null; try { mCanvas = mSurfaceHolder.lockCanvas(); if (mCanvas != null) { mCanvas.drawColor(Color.WHITE); mCanvas.drawText("绘制文字", x, 20, mPaint); mCanvas.drawCircle(35, 50, 20, mPaint); } } catch (Exception e) { e.printStackTrace(); } finally { if (mCanvas != null) { mSurfaceHolder.unlockCanvasAndPost(mCanvas); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { mThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { System.out.println("www:surfaceDestroyed"); } @Override public void run() { while (true) { draw(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }
说明:
- 添加文字x坐标位置的属性:private float x = 10;
- 添加行为,左移:left(); 右移:right();
- 在run方法里面修改逻辑为每隔0.1秒刷新绘制一次;
效果如下:
希望对你有所帮助!:)
相关推荐
android 通过surfacetexture绘制Bitmap,使用ISurfaceComposerClient创建新图层
面绘制与体绘制方法的不同,以及各自的优缺点,两种方法做出的结果显示。surface render and volume render
微软的Surface Pro 3平板的用户手册,中文版,操作系统是Windows8.1,希望能对有该产品的用户提供帮助
Response Surface Design and Analysis响应面设计与分析,实验软件“设计专家”DX11版:Docs » Tutorials »8. Response Surface 文档—教程—响应面,个人翻译稿。 使用标准的RSM设计来研究化学过程,称为中心...
微软Surface系列壁纸(共19张)超高清壁纸 Surface Book - Blue 3500 ✖ 2333 Surface Book - Rainbow 3000 ✖ 2000 Surface Book - Red 2500 ✖ 1667 Surface Book - Yellow 2500 ✖ 1666 Surface Family 2050 ✖ ...
1.Android中使用4.0新特性SurfaceTexture自定义相机预览 2.在PictureCallback回调中保存图片
除SurfacePro5外,还有其它的SurfacePro系统,不定时的更新现在有(surface pro5 win 10 1809,surface pro7 win 10 家庭,surface pro4 win 10专业,SurfaceBook_BMR_45_3.526.0,SurfaceGo_BMR_41_1.011.2,...
Surfacer11中文版
基于NOAH-LSM的未来气候变化下径流响应研究,袁山水,任立良,基于陆面水文模式Noah LSM(Noah Land Surface Model)构建气候变化对我国径流影响评价模型。采用3种通用环流模式GCMs(General Circulation Models)模拟各
SurfaceView 多层绘制透明图 一层有一层 上层能看见以前绘制的
Surface Explorer 3D在3D中绘制数学曲面。 用户定义的表面方程可以是显式的,隐式的或参数化的。 表面和颜色方程式由用户指定。 用户可以导出到剪贴板或文件格式(包括VRML,POV,DXF,STL),并输出到打印机。 ...
surfacer11中文版,逆向工程,三维建模
kanzi在Android端的可运行代码,环境为Android studio。主要内容为在Android端,kanzi和Android之间如何交互,接口定义等。
surface与surface pro 的技术参数对比
让Surface中的IE浏览器可以打开所有网站的Flash.docx
Surface 2.0 SDK基于Windows 7、.NET Framework 4.0、WPF 4.0,并于Visual Studio 2010无缝集成,内置开发多用户、多点触摸应用所需的大量控件、API、实例和文档(支持PixelSense技术),还有用于在Windows 7 32/64位...
Surface校屏幕软件,当你的surface触屏正常但是电磁笔无法书写时,可以用这款软件矫正,内含所有必须环境的安装包,傻瓜操作,简单方便。
Surface 2.0 SDK基于Windows 7、.NET Framework 4.0、WPF 4.0,并于Visual Studio 2010无缝集成,内置开发多用户、多点触摸应用所需的大量控件、API、实例和文档(支持PixelSense技术),还有用于在Windows 7 32/64位...
说明:该文件为最新Surface Pro5 官方恢复镜像文件高速下载地址,为本人亲自挂机下载了近20个小时才从官网搬运过来。同款平板的朋友需要恢复自己的Surface Pro5平板就再也不需要忍受官方几十kb/s的下载速度了。里面...
本资源提供给大家使用,希望对大家的开发有所帮助,这是一个基于MATLAB模拟surface plasmon的随着不同角度变化的电磁场分布,如果想要更多,联系我,谢谢支持。