初次提交
This commit is contained in:
338
第20章 BN赛艇/BNST/src/com/bn/st/d2/HelpSurfaceView.java
Normal file
338
第20章 BN赛艇/BNST/src/com/bn/st/d2/HelpSurfaceView.java
Normal file
@@ -0,0 +1,338 @@
|
||||
package com.bn.st.d2;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Paint;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceHolder;
|
||||
import static com.bn.st.xc.Constant.*;
|
||||
|
||||
import com.bn.R;
|
||||
|
||||
public class HelpSurfaceView extends MySFView
|
||||
{
|
||||
MyActivity activity;//Activity的引用
|
||||
Canvas c;//画笔的引用
|
||||
Paint paint;//画笔的引用
|
||||
SurfaceHolder holder;//锁的引用
|
||||
Bitmap[] bg_bitmap; //背景图
|
||||
Bitmap pre_page; //上一页按钮图片
|
||||
Bitmap next_page; //下一页按钮图片
|
||||
Bitmap back;
|
||||
|
||||
Bitmap pre_page_press; //上一页按钮图片
|
||||
Bitmap next_page_press; //下一页按钮图片
|
||||
Bitmap back_press;
|
||||
|
||||
//帮助界面中的闪烁提示
|
||||
Bitmap[] mark_bitmap;
|
||||
//每张闪烁提示图片的xy坐标
|
||||
private final float[][] mark_xy=
|
||||
{
|
||||
{246,308},
|
||||
{44,170},
|
||||
{15,115},
|
||||
{50,160},
|
||||
{184,242}
|
||||
};
|
||||
int fullTime=0;//记录从开始到当前的时间
|
||||
long startTime;//开始时间
|
||||
|
||||
private float button_pre_x=20f*ratio_width;//back图片按钮的左上角的点的坐标
|
||||
private float button_pre_y=415f*ratio_height;
|
||||
private float button_next_x=710f*ratio_width;//next图片按钮的左上角点的坐标
|
||||
private float button_next_y=415f*ratio_height;
|
||||
|
||||
private int next_flag=0;//0表示不移动,-1表示左移,1表示右移
|
||||
|
||||
private float bg_bitmap_curr_x=0;//当前背景图片的左上角点的X坐标
|
||||
private float bg_bitmap_curr_y=0;//当前背景图片的左上角点的Y坐标
|
||||
private float bg_bitmap_next_x;//下一幅背景图片的左上角点的X坐标
|
||||
private float bg_bitmap_next_y=0;//下一幅背景图片的左上角点的Y坐标
|
||||
private float move_span=80;//图片移动的速度
|
||||
int page_index=0;//当前帮助页面的索引值
|
||||
public boolean flag_go=true;
|
||||
|
||||
boolean back_flag=false;
|
||||
boolean pre_page_flag=false;
|
||||
boolean next_page_flag=false;
|
||||
|
||||
boolean isHaveNextFlag=true;
|
||||
boolean isHavePreFlag=false;
|
||||
|
||||
public HelpSurfaceView(MyActivity activity)
|
||||
{
|
||||
this.activity = activity;
|
||||
paint = new Paint(); //创建画笔
|
||||
bg_bitmap=new Bitmap[5];//创建帮助界面背景图片数组对象
|
||||
mark_bitmap=new Bitmap[5];//创建帮助界面中标注提醒图片数组对象
|
||||
paint.setAntiAlias(true);//打开抗锯齿
|
||||
initBitmap(); //初始化用到的图片资源
|
||||
startTime=System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void initThread()
|
||||
{
|
||||
next_flag=0;//0表示不移动,-1表示左移,1表示右移
|
||||
|
||||
bg_bitmap_curr_x=0;//当前背景图片的左上角点的X坐标
|
||||
bg_bitmap_curr_y=0;//当前背景图片的左上角点的Y坐标
|
||||
bg_bitmap_next_x=0;//下一幅背景图片的左上角点的X坐标
|
||||
bg_bitmap_next_y=0;//下一幅背景图片的左上角点的Y坐标
|
||||
move_span=80;//图片移动的速度
|
||||
page_index=0;//当前帮助页面的索引值
|
||||
flag_go=true;
|
||||
|
||||
back_flag=false;
|
||||
pre_page_flag=false;
|
||||
next_page_flag=false;
|
||||
|
||||
isHaveNextFlag=true;
|
||||
isHavePreFlag=false;
|
||||
|
||||
new Thread()//创建一个线程调用doDraw方法
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
while(flag_go)
|
||||
{
|
||||
//判断是左移还是右移
|
||||
if(next_flag==-1)//左移
|
||||
{
|
||||
bg_bitmap_curr_x=bg_bitmap_curr_x-move_span;
|
||||
bg_bitmap_next_x=bg_bitmap_next_x-move_span;
|
||||
if(bg_bitmap_curr_x<=-SCREEN_WIDTH)
|
||||
{
|
||||
bg_bitmap_curr_x=-SCREEN_WIDTH;
|
||||
next_flag=0;
|
||||
page_index++;
|
||||
bg_bitmap_curr_x=0;
|
||||
bg_bitmap_next_x=SCREEN_WIDTH;
|
||||
if(page_index==bg_bitmap.length-1)
|
||||
{
|
||||
isHaveNextFlag=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(next_flag==1)//右移
|
||||
{
|
||||
bg_bitmap_curr_x=bg_bitmap_curr_x+move_span;
|
||||
bg_bitmap_next_x=bg_bitmap_next_x+move_span;
|
||||
if(bg_bitmap_curr_x>=SCREEN_WIDTH)
|
||||
{
|
||||
bg_bitmap_curr_x=SCREEN_WIDTH;
|
||||
page_index--;
|
||||
bg_bitmap_curr_x=0;
|
||||
bg_bitmap_next_x=-SCREEN_WIDTH;
|
||||
if(page_index==0)
|
||||
{
|
||||
isHavePreFlag=false;
|
||||
}
|
||||
next_flag=0;
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
Thread.sleep(10);//线程休眠100毫秒
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
}
|
||||
|
||||
//重写onDraw方法
|
||||
@Override
|
||||
public void onDraw(Canvas canvas)
|
||||
{
|
||||
super.onDraw(canvas);
|
||||
canvas.drawColor(Color.argb(255, 0, 0, 0));//清屏为黑色
|
||||
canvas.drawBitmap(bg_bitmap[page_index],bg_bitmap_curr_x,bg_bitmap_curr_y, null);//画当前背景
|
||||
|
||||
//当界面没有在移动的时候,绘制当前帮助界面的闪烁图标提示
|
||||
if(next_flag==0)
|
||||
{
|
||||
//绘制帮助界面闪动的图标
|
||||
long currentTime=System.currentTimeMillis();//记录当前时间
|
||||
fullTime=(int) ((currentTime-startTime));//记录总时间
|
||||
//将1秒分成两份,在0.7秒内绘制,0.3秒内不绘制
|
||||
if((fullTime/100)%10 < 7) {
|
||||
//绘制翻页指示图标
|
||||
System.out.println(ratio_width+" "+ratio_height);
|
||||
canvas.drawBitmap(mark_bitmap[page_index], mark_xy[page_index][0]*ratio_width, mark_xy[page_index][1]*ratio_height, paint);
|
||||
}
|
||||
}
|
||||
|
||||
if(next_flag==-1)
|
||||
{
|
||||
canvas.drawBitmap(bg_bitmap[page_index+1],bg_bitmap_next_x,bg_bitmap_next_y, null);//画下一幅背景
|
||||
}
|
||||
if(next_flag==1)
|
||||
{
|
||||
canvas.drawBitmap(bg_bitmap[page_index-1],bg_bitmap_next_x,bg_bitmap_next_y, null);//画下一幅背景
|
||||
}
|
||||
if(isHaveNextFlag==false)
|
||||
{
|
||||
if(!back_flag)
|
||||
{
|
||||
canvas.drawBitmap(back, button_next_x, button_next_y, null);//绘制back按钮
|
||||
}
|
||||
else
|
||||
{
|
||||
canvas.drawBitmap(back_press, button_next_x, button_next_y, null);//绘制back按钮
|
||||
}
|
||||
}
|
||||
if(page_index>0)//当前的页面索引大于0
|
||||
{
|
||||
if(!pre_page_flag)
|
||||
{
|
||||
canvas.drawBitmap(pre_page, button_pre_x, button_pre_y, paint);//绘制上一页按钮
|
||||
}else
|
||||
{
|
||||
canvas.drawBitmap(pre_page_press, button_pre_x, button_pre_y, paint);//绘制上一页按钮
|
||||
}
|
||||
}
|
||||
if(!isHavePreFlag)
|
||||
{
|
||||
if(!back_flag)
|
||||
{
|
||||
canvas.drawBitmap(back, button_pre_x, button_pre_y, null);//绘制back按钮
|
||||
}
|
||||
else
|
||||
{
|
||||
canvas.drawBitmap(back_press, button_pre_x, button_pre_y, null);//绘制back按钮
|
||||
}
|
||||
}
|
||||
if(page_index<bg_bitmap.length-1)//当前页面索引值小于帮助图片数组-1
|
||||
{
|
||||
if(!next_page_flag)
|
||||
{
|
||||
canvas.drawBitmap(next_page, button_next_x, button_next_y, paint);//绘制下一页按钮
|
||||
}else
|
||||
{
|
||||
canvas.drawBitmap(next_page_press, button_next_x, button_next_y, paint);//绘制下一页按钮
|
||||
}
|
||||
}
|
||||
}
|
||||
//重写触摸事件方法
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent e)
|
||||
{
|
||||
int x=(int)e.getX();//获取触控点的XY坐标
|
||||
int y=(int)e.getY();
|
||||
switch(e.getAction())
|
||||
{
|
||||
case MotionEvent.ACTION_DOWN://抬起事件
|
||||
if(next_flag==0&&x>button_pre_x&&x<button_pre_x+pre_page.getWidth()&&y>button_pre_y&&y<button_pre_y+pre_page.getHeight())
|
||||
{
|
||||
if(!isHavePreFlag)
|
||||
{
|
||||
back_flag=true;
|
||||
}
|
||||
else
|
||||
{
|
||||
pre_page_flag=true;
|
||||
}
|
||||
}
|
||||
else if(next_flag==0&&x>button_next_x&&x<button_next_x+pre_page.getWidth()&&y>button_next_y&&y<button_next_y+pre_page.getHeight())
|
||||
{
|
||||
if(!isHaveNextFlag)
|
||||
{
|
||||
back_flag=true;
|
||||
}
|
||||
else
|
||||
{
|
||||
next_page_flag=true;
|
||||
}
|
||||
|
||||
}
|
||||
// else if(page_index==0&&x>button_next_x&&x<button_next_x+back.getWidth()&&y>button_next_y&&y<button_next_y+back.getHeight())
|
||||
// {//返回按钮
|
||||
// back_flag=true;
|
||||
// }else if(page_index==bg_bitmap.length-1&&x>button_pre_x&&x<button_pre_x+back.getWidth()&&y>button_pre_y&&y<button_pre_y+back.getHeight())
|
||||
// {//返回按钮
|
||||
// back_flag=true;
|
||||
// }
|
||||
break;
|
||||
case MotionEvent.ACTION_UP://抬起事件
|
||||
pre_page_flag=false;
|
||||
next_page_flag=false;
|
||||
back_flag=false;
|
||||
if(next_flag==0&&x>button_pre_x&&x<button_pre_x+pre_page.getWidth()&&y>button_pre_y&&y<button_pre_y+pre_page.getHeight())
|
||||
{
|
||||
if(!isHavePreFlag)
|
||||
{
|
||||
//返回到主菜单
|
||||
flag_go=false;
|
||||
activity.hd.sendEmptyMessage(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
isHavePreFlag=true;
|
||||
isHaveNextFlag=true;
|
||||
//右移
|
||||
next_flag=1;
|
||||
bg_bitmap_next_x=-SCREEN_WIDTH;
|
||||
}
|
||||
}
|
||||
else if(next_flag==0&&x>button_next_x&&x<button_next_x+pre_page.getWidth()&&y>button_next_y&&y<button_next_y+pre_page.getHeight())
|
||||
{
|
||||
if(!isHaveNextFlag)
|
||||
{
|
||||
//返回主菜单
|
||||
flag_go=false;
|
||||
activity.hd.sendEmptyMessage(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
isHaveNextFlag=true;
|
||||
isHavePreFlag=true;
|
||||
//左移
|
||||
next_flag=-1;
|
||||
bg_bitmap_next_x=SCREEN_WIDTH;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//初始化图片的方法
|
||||
public void initBitmap()
|
||||
{
|
||||
bg_bitmap[0] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.bg_bitmap0),ratio_width,ratio_height);//帮助界面背景图片
|
||||
bg_bitmap[1] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.bg_bitmap1),ratio_width,ratio_height);//帮助界面背景图片
|
||||
bg_bitmap[2] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.bg_bitmap2),ratio_width,ratio_height);//帮助界面背景图片
|
||||
bg_bitmap[3] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.bg_bitmap3),ratio_width,ratio_height);//帮助界面背景图片
|
||||
bg_bitmap[4] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.bg_bitmap4),ratio_width,ratio_height);//帮助界面背景图片
|
||||
mark_bitmap[0] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.mark0),ratio_width,ratio_height);
|
||||
mark_bitmap[1] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.mark1),ratio_width,ratio_height);
|
||||
mark_bitmap[2] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.mark2),ratio_width,ratio_height);
|
||||
mark_bitmap[3] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.mark3),ratio_width,ratio_height);
|
||||
mark_bitmap[4] = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.mark4),ratio_width,ratio_height);
|
||||
pre_page = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.pre_page),ratio_width,ratio_height);//上一页按钮图片
|
||||
next_page = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.next_page),ratio_width,ratio_height);//下一页按钮图片
|
||||
back = scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.back),ratio_width,ratio_height);//上一页按钮图片
|
||||
|
||||
pre_page_press= scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.pre_page_press),ratio_width,ratio_height);//上一页按钮图片
|
||||
next_page_press= scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.next_page_press),ratio_width,ratio_height);//下一页按钮图片
|
||||
back_press= scaleToFit(BitmapFactory.decodeResource(activity.getResources(), R.drawable.back_press),ratio_width,ratio_height);//上一页按钮图片
|
||||
}
|
||||
|
||||
//缩放图片的方法
|
||||
public static Bitmap scaleToFit(Bitmap bm,float width_Ratio,float height_Ratio)
|
||||
{
|
||||
int width = bm.getWidth(); //图片宽度
|
||||
int height = bm.getHeight(); //图片高度
|
||||
Matrix matrix = new Matrix();
|
||||
matrix.postScale((float)width_Ratio, (float)height_Ratio);//图片等比例缩小为原来的fblRatio倍
|
||||
Bitmap bmResult = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);//声明位图
|
||||
return bmResult; //返回被缩放的图片
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user