赞
踩
这个测试项,要捕捉当前有几个触摸点,当前触摸点坐标,滑动事件在x轴、y轴方向的速度等信息,在触摸时跟随触摸点会出现十字光标,绘制出滑动轨迹。
首先绘制出暗色格子背景,采用了自定义View,较为简单,核心代码如下:
Paint paint; //画笔
private int mWidth;
private int mHeight;
public Check(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setColor(getResources().getColor(R.color.deepGray));//设置画笔颜色
paint.setStrokeJoin(Paint.Join.ROUND);//设置画笔图形接触时笔迹的形状
paint.setStrokeCap(Paint.Cap.ROUND);//设置画笔离开画板时笔迹的形状
paint.setStrokeWidth(1); //设置画笔的宽度
}
/**
* 这个方法可以获得控件的宽高
* @param canvas
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mWidth = w;
mHeight = h;
}
/**
* 绘制网格线
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
int lineStart = 80;
int space = lineStart; //长宽间隔
int vertz = lineStart;
int hortz = lineStart;
for (int i = 0; i < 100; i++) {
canvas.drawLine(0, vertz, mWidth, vertz, paint);
canvas.drawLine(hortz, 0, hortz, mHeight, paint);
vertz += space;
hortz += space;
}
}
接下来,因为要在这个背景上画图,我在其上覆盖一层透明ImageView,给该iv设置这个属性:
android:background="@android:color/transparent"
接下来的绘制滑动轨迹和十字光标都在这个iv上完成。
接下来遇到了一些坑,都踩了一遍。
因为这个绘图是发生在一个Fragment里,我的绘图界面要设置全屏,但是该Activity中的其他Fragment则不需要这个设置。于是就在这个Fragment中获取到Window,然后设置全屏标记,然后让根视图MATCH_PARENT。
getActivity().getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//mRootView是BaseFragment中设置的该Fragment的视图
this.mRootView.setLayoutParams(
new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT));
创建bitmap,设置bitmap的高宽时,遇到了问题。
因为在onCreateView中View.getWidth和View.getHeight无法获得一个view的高度和宽度,这是因为View组件布局要在onResume回调后完成。所以现在需要使用getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。
OnGlobalLayoutList
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。