请问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);
}
}

}
...全文
342 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();

80,352

社区成员

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

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