请问Android如何在视图里添加按钮呢?

wainiyitao2010 2017-09-29 12:37:26
我用自定义按钮图片放在xml里,但是在xml里不清楚如何去控制SurfaceView里的内容了。。。
我想在SurfaceView直接添加方向键自定义按钮,用来控制上下左右,能够直接影响到视图里面的内容的,
所以就在SurfaceView里用Bitmap添加图片 但是Bitmap的对象不能实现触摸监听,导致绘画进去的内容有显示 却无法实现监听效果,求大神帮忙解决阿~!
import android.view.SurfaceView;
import android.view.View;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;

import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;

public class MySurfaceView extends SurfaceView implements Callback {
private SurfaceHolder sfh;
private Paint paint;
private Canvas canvas;
private ImageButton jj;
private Bitmap up,down,left,right,centre;
public MySurfaceView(Context context) {
super(context);
sfh=this.getHolder();
sfh.addCallback(this);
paint=new Paint();
up=BitmapFactory.decodeResource(this.getResources(), R.drawable.up_no);
down=BitmapFactory.decodeResource(this.getResources(), R.drawable.down_no);
left=BitmapFactory.decodeResource(this.getResources(), R.drawable.left_no);
right=BitmapFactory.decodeResource(this.getResources(), R.drawable.right_no);
centre=BitmapFactory.decodeResource(this.getResources(), R.drawable.centre);


}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {


}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
myDraw();
}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {


}



private void myDraw(){
try{
canvas=sfh.lockCanvas();
if(canvas!=null){
canvas.drawRGB(255,255,255);

canvas.save(); //up键
canvas.scale(1.5f, 1.5f,50+up.getWidth(),50+up.getHeight());
canvas.drawBitmap(up,200,950,paint);
canvas.restore();

canvas.save(); //down键
canvas.scale(1.5f, 1.5f,50+down.getWidth(),50+down.getHeight());
canvas.drawBitmap(down,200,1150,paint);
canvas.restore();

canvas.save();//left键
canvas.scale(1.5f, 1.5f,50+left.getWidth(),50+left.getHeight());
canvas.drawBitmap(left,100,1060,paint);
canvas.restore();

canvas.save();//right键
canvas.scale(1.5f, 1.5f,50+right.getWidth(),50+right.getHeight());
canvas.drawBitmap(right,300,1060,paint);
canvas.restore();

canvas.save();
canvas.scale(1f, 1f,centre.getWidth(),centre.getHeight());
canvas.drawBitmap(centre,250,1525,paint);
canvas.restore();

}
}catch(Exception e){

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

}
...全文
339 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31503523 2017-10-05
  • 打赏
  • 举报
回复
楼主是需要,用布局里的button去控制surfaceview里面的bitmap的动作?
qq_31503523 2017-10-05
  • 打赏
  • 举报
回复
加我q2411537247也许我能解决你的问题
wainiyitao2010 2017-09-29
  • 打赏
  • 举报
回复
引用 1 楼 xj396282771 的回复:
重写onTouchEvent事件,把当前点击的位置进行一个是否在你某个按钮的图片范围内的判断。假如在left这个按钮,就调用向左滑的代码 示例:
@Override
	public boolean onTouchEvent(MotionEvent event) {

		// float value = 0;
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			y_down = event.getY();
			break;
		case MotionEvent.ACTION_MOVE:
			y_up = event.getY();
			value = y_down - y_up;
			this.invalidate();
			break;
		case MotionEvent.ACTION_UP:
			 initColorView();
			break;
		}
		return true;
	}
这个方法我有用过 但是图片的样子改变不了 请问有什么办法来改变图片呢?
wainiyitao2010 2017-09-29
  • 打赏
  • 举报
回复
引用 2 楼 qq_34364155 的回复:
模拟点击事件,重写onTouchEvent事件,如果触摸的位置在你某个按钮的图片范围内,就是点击了该图片
你好 那请问要切换图片要用哪种方式换呢 我用 up=BitmapFactory.decodeResource(this.getResources(), R.drawable.up_press);来换成一张点击按钮的样子没有效果
寒冰大神 2017-09-29
  • 打赏
  • 举报
回复
模拟点击事件,重写onTouchEvent事件,如果触摸的位置在你某个按钮的图片范围内,就是点击了该图片
wainiyitao2010 2017-09-29
  • 打赏
  • 举报
回复
引用 5 楼 qq_34364155 的回复:
[quote=引用 3 楼 wainiyitao2010 的回复:] [quote=引用 2 楼 qq_34364155 的回复:] 模拟点击事件,重写onTouchEvent事件,如果触摸的位置在你某个按钮的图片范围内,就是点击了该图片
你好 那请问要切换图片要用哪种方式换呢 我用 up=BitmapFactory.decodeResource(this.getResources(), R.drawable.up_press);来换成一张点击按钮的样子没有效果[/quote] canvas.drawBitmap(up,200,950,paint); postInvalidate(); 要记得 postInvalidate();[/quote] 您好 麻烦能不能写一个完整的代码出来呀 我分都给你
Jing丶無雙 2017-09-29
  • 打赏
  • 举报
回复
重写onTouchEvent事件,把当前点击的位置进行一个是否在你某个按钮的图片范围内的判断。假如在left这个按钮,就调用向左滑的代码 示例:
@Override
	public boolean onTouchEvent(MotionEvent event) {

		// float value = 0;
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			y_down = event.getY();
			break;
		case MotionEvent.ACTION_MOVE:
			y_up = event.getY();
			value = y_down - y_up;
			this.invalidate();
			break;
		case MotionEvent.ACTION_UP:
			 initColorView();
			break;
		}
		return true;
	}
寒冰大神 2017-09-29
  • 打赏
  • 举报
回复
引用 3 楼 wainiyitao2010 的回复:
[quote=引用 2 楼 qq_34364155 的回复:] 模拟点击事件,重写onTouchEvent事件,如果触摸的位置在你某个按钮的图片范围内,就是点击了该图片
你好 那请问要切换图片要用哪种方式换呢 我用 up=BitmapFactory.decodeResource(this.getResources(), R.drawable.up_press);来换成一张点击按钮的样子没有效果[/quote] canvas.drawBitmap(up,200,950,paint); postInvalidate(); 要记得 postInvalidate();
       Android零基础入门这门课程的目标:带您走进Android大门,了解Android整体框架,演变发展历史 ;掌握Android编程的基础概念,教您构建各种应用程序:从Hello World开始,直到带有调度作业、更新设置、访问网络和使用架构组件的应用程序;课程结束后,能自己动手编写一定难度的Android程序,具备自学更高级开发的基础,能看懂开源的Android代码。      课程整体上分5个大的模块依次展开:      1.入门 (第1~3章)      2.用户体验(第4~6章)      3.在后台运行(第7~8章)      4.保存用户数据(第9~10章)      5.应用上架(第11章)。课程大纲如下:第1章. 构建您的第一个应用程序       1. 对Android有基本认识,搞懂Android系统整体框架,Android不同版本以及这些版本演变过程       2.以HelloWord为例,了解Android app的程序结构       3.Android UI的基础知识-视图和布局,初步介绍Android View的事件处理,及图片等资源的使用等第2章.  Activity和Intent       1.Activity 和 Intent 基础和用法       2.Activity生命周期和回调       3.Activity实例状态第3章. 测试应用 调试应用 及使用Support library       1.讲解Android两个主要的应用程序调试方法:日志 和 断点       2.如何对App进行单元测试       3.介绍Android中用于向后兼容的 Support library及用法第4章. 用户交互        讲解Android中常用控件的使用方法和注意事项,如按钮、输入控件、菜单、对话框、用户导航、列表等第5章. 令人愉快的用户体验      1.学会使用Drawables      2.使用Android studio中的图片和矢量图      3.讲解Android中主题和样式,以及如何定制主题和样式      4.Android著名的应用设计理念Material design,通过Material design打造极致的用户体验      5.如何让布局自适应不同尺寸的手机第6章. 界面测试        介绍Android UI自动化测试 Espresso第7章.后台任务        学会Android多线程编程,使用非UI线程在后台完成耗时任务,从网络存取数据。撑握Android的广播和后台服务第8章. 闹钟和调度程序       掌握Android定时任务和调度作业第9章.首选项和设置       学会使用Preferences保存用户数据,编写应用的设置界面,存取设置数据第10章.使用 Room 存储数据       学会使用Android SQLite数据库,通过Room组件对数据库增删改查,掌握LiveData和 ViewModel等架构组件第11章:App上架​     1.学会App在国内应用市场上架​     2.学会App在Google play上架课程中如果讲的不对的地方,请大家指出,我及时修正,我们共同努力,一起进步。

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧