被绘制的内容响应用户的交互,简单的看就是绘制内容的状态在用户操作时发生了变化。
对于在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秒刷新绘制一次;
效果如下:
希望对你有所帮助!:)
相关推荐
5. **用户交互**:描述中提到可以动态调控方向、颜色等,这意味着代码中会有事件监听器来响应用户的输入,比如鼠标点击或拖动,实时更新控制点的位置,或者改变曲面的属性如颜色、透明度等。 6. **性能优化**:由于...
6. **交互性**:GLSurfaceView可以通过设置触摸监听器或其他输入事件处理器,使其能够响应用户的触摸操作,从而实现交互式3D场景。 7. **优化**:在处理大量对象或复杂3D场景时,可能需要考虑优化策略,如顶点缓存...
反馈是指系统对用户操作应有即时的响应,让用户知道他们的操作已被接受。简单性和易学性要求设计简洁明了,避免过多复杂的设置。而容错性则是指即使用户误操作,系统也能尽可能地减少错误的影响。 GUI的实现涉及多...
B样条曲面绘制是计算机图形学中的一个重要概念,它涉及到数学、计算机编程以及图形用户界面设计等多个领域。在Java开发环境中,利用NetBeans编辑器进行B样条曲面的实现,可以为开发者提供一个直观且强大的工具来创建...
这个线程会等待消息队列中的消息,当有新的渲染请求(如应用程序更新视图)或硬件帧缓冲区状态变化时,它会被唤醒执行相应的操作,如绘制和合成屏幕内容。 3. **控制台事件监控线程**:在初始化硬件帧缓冲区时,...
4. **处理用户交互**:通过重写`GLSurfaceView`的触摸事件处理,可以响应用户的输入并相应地更新渲染。 对于初学者来说,理解`GLSurfaceView`的工作原理和如何在Android中集成OpenGL是至关重要的,这包括了解OpenGL...
凝视交互是一种基于眼动追踪的技术,可以让用户通过注视屏幕上的特定位置来进行交互。 #### 4.2 隐私 在使用凝视交互时,需要注意保护用户的隐私信息。 #### 4.3 设置 设置凝视交互时,需要确保硬件和软件环境都...
然而,描述中提到的“基于SurfaceView的绘制,实现标签功能”可能是指在SurfaceView上动态绘制具有文字或图片内容的标签,这些标签可能作为信息提示、用户交互元素或者界面装饰存在。 实现这个功能需要以下步骤: ...
6. **交互设计**:为了让效果更具吸引力,可以考虑添加用户交互,比如让用户触摸屏幕控制星星的移动速度或方向,或者根据时间、位置等因素改变星星的闪烁频率。 7. **资源管理**:如果使用了位图资源,记得在不再...
开发者可以通过SurfaceHolder监听Surface的状态变化,如创建、改变或销毁。SurfaceHolder提供了方法如`addCallback()`用于添加回调,以便在Surface发生变化时进行相应的操作,如初始化绘图环境。 2. **Surface创建...
同时,通过SurfaceHolder的setCallback()方法设置回调,监听Surface的状态变化,确保在Surface可用时进行绘制。 4. **触摸事件处理**: Engine类可以通过重写onTouchEvent()方法来处理用户的触摸事件。根据业务需求...
1. ** Wallpaper Engine**:通过` WallpaperService onCreateEngine()`方法创建,它是壁纸的运行环境,负责处理壁纸的绘制和用户交互。 2. **Canvas**:在`WallpaperService Engine.onDraw()`方法中,我们可以获取...
在开发基于Visual Studio 2013的项目时,针对Windows Surface Pro 4这样的设备进行触屏操作的优化是一项关键...在实际开发过程中,不断测试和优化是确保软件质量的关键,特别是对于多设备兼容性和用户交互体验的考量。
- **低延迟更新**:由于不在主线程中绘制,SurfaceView能快速响应变化,提供低延迟的图形更新,适合动态内容显示。 2. **组合图形**: 在游戏中,往往需要将多个图形组合在一起形成复杂的游戏场景。SurfaceView...
在SurfaceHolder接口的帮助下,我们可以监听Surface的状态变化,比如创建、改变或销毁,以便在合适的时机进行绘图。 创建抽奖转盘的第一步是设计转盘的布局。这可能包括多个扇区,每个扇区代表不同的奖项。每个扇区...
- **Handler/Looper机制**:用于在渲染线程和UI线程之间传递消息,更新游戏状态或者响应用户输入。 - **Canvas绘图**:在SurfaceView的Surface上,开发者通过Canvas进行图形绘制,实现游戏场景的渲染。 - **Thread...
8. **OnTouchListener**:这是Android中处理触摸事件的接口,通过实现`onTouch()`方法,开发者可以对用户的触摸动作做出响应,比如开始绘制、停止绘制等。 9. **XML布局文件**:在资源文件夹下的res/layout目录中,...
5. **响应用户交互**:为了让用户能够控制风车的转动,可以添加触摸事件监听器,根据用户的滑动或点击事件改变风车的旋转速度或方向。 6. **优化性能**:为了提高性能,避免不必要的重绘,可以使用`setWillNotDraw...
在Android开发中,有时我们需要为应用添加独特且吸引用户的交互元素。"android转盘圆周切换菜单 仿ios"是一个项目,目标是实现一个类似iOS风格的圆形转盘菜单,让用户能够通过触摸屏幕或者按钮来切换不同的选项。...