80,351
社区成员
发帖
与我相关
我的任务
分享
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:msurface="http://schemas.android.com/apk/res/com.example.testdraw"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.example.testdraw.MySurfaceView
android:id="@+id/msurfaceview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
msurface:paintColor="#1C86EE" >
</com.example.testdraw.MySurfaceView>
</FrameLayout>
<LinearLayout
android:id="@+id/layout_top"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@drawable/pchoose_bac"
android:visibility="gone" >
<Button
android:id="@+id/btnred"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pred" />
<Button
android:id="@+id/btnyell"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pyell" />
<Button
android:id="@+id/btngreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pgreen" />
<Button
android:id="@+id/btnblue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pblue" />
</LinearLayout>
</FrameLayout>
public class MainActivity extends Activity {
private LinearLayout layoutTop;
private static boolean isVisible = false;
private Button btnPaintRed;
private Button btnPaintBlue;
private Button btnPaintYellow;
private Button btnPaintGreen;
private MySurfaceView ms;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
btnPaintRed = (Button)findViewById(R.id.btnred);
btnPaintBlue = (Button)findViewById(R.id.btnred);
btnPaintYellow = (Button)findViewById(R.id.btnred);
btnPaintGreen = (Button)findViewById(R.id.btnred);
ms = (MySurfaceView)findViewById(R.id.msurfaceview);
btnPaintRed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ms.paintColor = Color.parseColor("#FF3366");
}
});
...
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int pCount = event.getPointerCount();
if (pCount == 3) {
layoutTop = (LinearLayout) findViewById(R.id.layout_top);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_POINTER_UP:
if (isVisible == true) {
layoutTop.setVisibility(View.GONE);
isVisible = false;
} else {
layoutTop.setVisibility(View.VISIBLE);
isVisible = true;
}
break;
}
}
return true;
}
}
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
public static final int TIME_IN_FRAME = 50;
public int paintColor;
Paint mPaint = null;
Paint mTextPaint = null;
SurfaceHolder mSurfaceHolder = null;
boolean mRunning = false;
Canvas mCanvas = null;
private Path mPath;
private float mPosX, mPosY;
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
this.setFocusable(true);
this.setFocusableInTouchMode(true);
mSurfaceHolder = this.getHolder();
mSurfaceHolder.addCallback(this);
mCanvas = new Canvas();
/* 获取参数 */
TypedArray tay = context.obtainStyledAttributes(attrs, R.styleable.MySurfaceView );
paintColor = tay.getColor(R.styleable.MySurfaceView_paintColor, 0xFFFFFFFF);
mPaint = new Paint();
//mPaint.setColor(Color.BLUE);
mPaint.setColor(paintColor);
mPaint.setAntiAlias(true);
mPaint.setAlpha(60);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(20);
mPath = new Path();
mTextPaint = new Paint();
mTextPaint.setColor(Color.BLACK);
mTextPaint.setTextSize(15);
tay.recycle();
}
//主要是这里不知道怎么处理,如果return false,绘图直接不显示了。
@Override
public boolean onTouchEvent(MotionEvent event) {
mPaint.setColor(paintColor);
int pCount = event.getPointerCount();
if (pCount == 3) {
return false;
} else {
int action = event.getAction();
float x = event.getX();
float y = event.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
mPath.moveTo(x, y);
break;
case MotionEvent.ACTION_MOVE:
mPath.quadTo(mPosX, mPosY, x, y);
break;
case MotionEvent.ACTION_UP:
// mPath.reset();
break;
}
// 记录当前触摸点得当前得坐标
mPosX = x;
mPosY = y;
return true;
}
}
private void onDraw() {
mCanvas.drawColor(Color.WHITE);
// 绘制曲线
mCanvas.drawPath(mPath, mPaint);
mCanvas.drawText("当前触笔X:" + mPosX, 0, 20, mTextPaint);
mCanvas.drawText("当前触笔Y:" + mPosY, 0, 40, mTextPaint);
}
public void run() {
// TODO Auto-generated method stub
while (mRunning) {
long startTime = System.currentTimeMillis();
synchronized (mSurfaceHolder) {
mCanvas = mSurfaceHolder.lockCanvas();
onDraw();
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
}
long endTime = System.currentTimeMillis();
int diffTime = (int) (endTime - startTime);
while (diffTime <= TIME_IN_FRAME) {
diffTime = (int) (System.currentTimeMillis() - startTime);
Thread.yield();
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mRunning = true;
new Thread(this).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mRunning = false;
}
}