大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
以自动实现KeyEvent.Callback接口为例子启动AndroidStudio,打开demo工程增加实现KeyEvent.Callback的类使用Alt+Enter快捷键把光标定位到接口名按Alt+Enter,并点击;Implementmethods;菜单项在弹出的“SelectMethodstoImplement”对话框中,点击OK按钮这样就可以实现所有的接口函数了。使用菜单实现接口方法把光标定位到接口名,执行菜单“Code”-“ImplementMethods”在弹出的“SelectMethodstoImplement”对话框中,点击OK按钮这样就可以实现所有的接口函数了
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都做网站、涵江网络推广、微信小程序、涵江网络营销、涵江企业策划、涵江品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供涵江建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
SurfaceView是View的继承结构中一个比较特殊的子类,它的作用是提供一个第二线程来完成图形的绘制。因此应用程序不需要等待View的图形绘制,第二线程会异步完成图形的绘制。
SurfaceView实现的步骤:
继续SurfaceView并实现SurfaceHolder.Callback接口,该接口提供了SurfaceView创建、属性发生变化、销毁的时间点,那么你可以在适当的时间点完成具体的工作。
在SurfaceView初始化的时候调用SurfaceView.getHolder()方法获取一个SurfaceHolder,SurfaceHolder用于管理SurfaceView的工作过程。为了让SurfaceHolder起作用,必须为SurfaceHolder添加回调方法(即第一步实现的SurfaceHolder.Callback):
[java] view plaincopyprint?
SurfaceHolder.addCallBack(SurfaceHolder.Callback);
在SurfaceView内创建第二线程的内部类(暂命名为SecondThread),它的主要任务是完成Canvas的图形绘制。为了能让SecondThread获得Canvas实例,必须给SecondThread传递在步骤二中获得的SurfaceHolder。现在就可以通过SurfaceHolder.lockCanvas()方法得到Canvas实例,并在Canvas上绘制图形。当图形绘制完成后,必须马上调用SurfaceHolder.unlockCanvasAndPost()为Canvas解锁,使其他线程可以使用该画布。
有几个注意点:
每一次通过SurfaceHolder获取的Canvas都会保持上一次绘制的状态。如果需要重新绘制图形,可以通过调用Canvas.drawColor()或Canvas.drawBitmap()来擦除上次遗留的图形。
并不一定只用第二线程来绘制图形,也可以开启第三,第四个线程来绘制图形。
注意线程安全。
不需要像View一样,调用invalidate()方法来指示图形的刷新。
SurfaceView的一个范例:
[java] view plaincopyprint?
package com.sin90lzc.android.sample;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class CanvasView extends SurfaceView implements SurfaceHolder.Callback {
public static class Point {
private float x;
private float y;
public Point(float x, float y) {
this.x = x;
this.y = y;
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public Point nextPoint(Orien o) {
float tempX = x;
float tempY = y;
switch (o) {
case UP:
tempY = y - LINE_LENGTH;
break;
case DOWN:
tempY = y + LINE_LENGTH;
break;
case LEFT:
tempX = x - LINE_LENGTH;
break;
case RIGHT:
tempX = x + LINE_LENGTH;
break;
case UNKNOWN:
break;
}
return new Point(tempX, tempY);
}
}
enum Orien {
UP, LEFT, DOWN, RIGHT, UNKNOWN
}
public static class DrawThread extends Thread {
private ListPoint points = Collections
.synchronizedList(new ArrayListPoint());
private boolean mRun;
private Paint mPaint;
private Orien curOrien;
public synchronized void setRun(boolean run) {
this.mRun = run;
notifyAll();
}
public synchronized boolean getRun() {
while (!mRun) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return mRun;
}
//当按上下左右键时,生成相应的点坐标
private synchronized boolean doKeyDown(int KeyCode, KeyEvent event) {
synchronized (holder) {
Point p = null;
switch (KeyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
if (curOrien != Orien.DOWN) {
curOrien = Orien.UP;
p = curPoint.nextPoint(curOrien);
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if (curOrien != Orien.UP) {
curOrien = Orien.DOWN;
p = curPoint.nextPoint(curOrien);
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
if (curOrien != Orien.RIGHT) {
curOrien = Orien.LEFT;
p = curPoint.nextPoint(curOrien);
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (curOrien != Orien.LEFT) {
curOrien = Orien.RIGHT;
p = curPoint.nextPoint(curOrien);
}
break;
default:
curOrien = Orien.UNKNOWN;
}
if (p != null) {
curPoint = p;
points.add(p);
setRun(true);
}
Log.i(LOG_TAG, curOrien.toString());
}
return true;
}
//当释放按键时,停止绘图
private synchronized boolean doKeyUp(int KeyCode, KeyEvent event) {
synchronized (holder) {
setRun(false);
curOrien = Orien.UNKNOWN;
}
return true;
}
SurfaceHolder holder;
private Point curPoint;
public DrawThread(SurfaceHolder holder) {
this.holder = holder;
mPaint = new Paint();
mPaint.setColor(Color.GREEN);
curPoint = new Point(50, 50);
points.add(curPoint);
}
public void resetPoint() {
}
private void doDraw(Canvas canvas) {
for (int i = 0; i + 1 points.size(); i += 1) {
Point lp = points.get(i);
Point np = points.get(i + 1);
canvas.drawLine(lp.getX(), lp.getY(), np.getX(), np.getY(),
mPaint);
}
}
@Override
public void run() {
Canvas canvas = null;
while (getRun()) {
try {
canvas = holder.lockCanvas();
synchronized (holder) {
doDraw(canvas);
}
} finally {
holder.unlockCanvasAndPost(canvas);
setRun(false);
}
}
}
}
private DrawThread thread;
public static final String LOG_TAG = "CanvasView";
private static final int LINE_LENGTH = 30;
public CanvasView(Context context) {
super(context);
}
public CanvasView(Context context, AttributeSet attrs) {
super(context, attrs);
//SurfaceView由SurfaceHolder管理
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new DrawThread(holder);
thread.start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return thread.doKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
return thread.doKeyUp(keyCode, event);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Log.i(LOG_TAG, "surfaceChanged");
thread.resetPoint();
thread.setRun(true);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.i(LOG_TAG, "surfaceCreated");
thread.resetPoint();
thread.setRun(true);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i(LOG_TAG, "surfaceDestroyed");
thread.setRun(false);
}
}
Notice:例子中,没一次按下方向键都得把所有坐标重新绘制一遍。如果只是绘制最后一次没绘制的点时,不知道为什么会变成虚线,有待解决。
《王者荣耀》快速获得40个皮肤碎片如下:
1、连续签到七天,可以获得一个皮肤碎片。
2、在商城的新品界面,消耗20荣耀积分参与抽奖,可以抽到一个或两个皮肤碎片。
3、在商城的特惠界面,点击限购,可以消费20点券购买皮肤碎片福袋,可以获得两个皮肤碎片。
4、在商城的夺宝界面,点击积分夺宝,消耗60荣耀积分可以参与抽奖,可能会抽到五个皮肤碎片。
5、在荣耀战令界面点开兑换界面,消耗10战令币可以兑换一个史诗皮肤秘宝,可能会开出两个皮肤碎片。或者消耗10战令币直接兑换一个皮肤碎片。
6、在友情重燃界面点击友情商店,消耗4个友情积分可以兑换一个皮肤碎片。
王者荣耀简介:
《王者荣耀》是由腾讯游戏天美工作室群开发并运行的一款运营在Android、IOS、NS平台上的MOBA类国产手游,于2015年11月26日在Android、IOS平台上正式公测,游戏前期使用名称有《英雄战迹》、《王者联盟》。
服务器写一个同步方法一次只返回一条数据
当有人去获取数据时,发现为0了就表示完了
这是一个同步的问题,即多(用户)线程访问服务端的时候,你要确保某个方法是同步的,即一次只能有一条线程访问
抽奖的转盘,你可以设置转盘的每部分都是一个数字,使用随机函数来定义,不过需要设置一个条件,让其到达抽中大奖,重新设置值等等。