Android 怎么将主程序添加到欢迎界面里面

我做好了一个欢迎界面,并且做了下按钮触发,里面什么都还没有,我这边有一个游戏主程序,应该怎么样才能合理的添加进去呢? 添加的结果就是 点击这个按钮 就进入这个主程序。下面是代码
这个是我的欢迎界面的代码
package sen.tan;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class dazhuankuaiActivity extends Activity {
BallView myview;
public static int screenWidth ;
public static int screenHeight;
private TextView textview;
Button kaishi,jieshu,guanyu;
ImageView image;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String string = "欢迎进入疯狂打砖块游戏";
image = (ImageView) this.findViewById(R.id.image);
image.setImageResource(R.drawable.img1);
textview =(TextView) this.findViewById(R.id.textview);
textview.setTextSize(20);
textview.setTextColor(Color.GREEN);
textview.setBackgroundColor(Color.RED);
textview.setText(string);
kaishi=(Button)findViewById(R.id.button1);
guanyu=(Button)findViewById(R.id.button2);
jieshu=(Button)findViewById(R.id.button3);
kaishi.setWidth(250);
guanyu.setWidth(200);
jieshu.setWidth(150);
kaishi.setTextSize(35);
guanyu.setTextSize(29);
jieshu.setTextSize(24);

    jieshu.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v)
        {
            dazhuankuaiActivity.this.finish();
        }


    });
    guanyu.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v){
            textview.setText("本游戏由xxx制作,此游戏控制左右按键,来回移动挡板,不让小球掉落,当小球把上方砖块全部打完时,游戏胜利");
        }
    });
    kaishi.setOnClickListener(new Button.OnClickListener(){
         public void onClick(View v)
         {
         }
    });

下面是我找到的主程序
package ab.cc;

import android.app.Activity;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.Window;
import android.view.WindowManager;

public class BaomingActivity extends Activity
{

BallView myView;

static int screenWidth;

static int screenHeight;

/** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);

/* 定义DisplayMetrics对象 */

DisplayMetrics dm = new DisplayMetrics();

/* 取得窗口属性 */

getWindowManager().getDefaultDisplay().getMetrics(dm);

/* 窗口的宽度 */

screenWidth = dm.widthPixels;

    /* 窗口的高度 */

screenHeight = dm.heightPixels;
//

setTitle("宽"+screenWidth+" 高"+screenHeight);

    /* 设置为无标题栏 */

requestWindowFeature(Window.FEATURE_NO_TITLE);

/* 设置为全屏模式 */ 

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

myView = new BallView(this);

   //设置显示GameSurfaceView视图

setContentView(myView);
}//end of onCreate()

   //触笔事件

public boolean onTouchEvent(MotionEvent event)
{

return true;
}


   //按键按下事件

public boolean onKeyDown(int keyCode, KeyEvent event)
{

switch (keyCode)
    {

//菜单按键-设为初始菜单

case KeyEvent.KEYCODE_MENU:

myView.resetGame();
    //重新开始

break;

//中间按键

case KeyEvent.KEYCODE_DPAD_CENTER:

myView.ball_isRun = !myView.ball_isRun;//开始//暂停

    break;

//左方向键

case KeyEvent.KEYCODE_DPAD_LEFT:

        if(myView.ball_isRun){

    if(myView.board_left<=myView.board_x_move)

        {

myView.board_left=0;

    myView.board_right=myView.board_length;

    }else{

    myView.board_left-=myView.board_x_move;

            myView.board_right-=myView.board_x_move;}

}

             break;

//右方向键

case KeyEvent.KEYCODE_DPAD_RIGHT:
if(myView.ball_isRun){

    if(screenWidth-myView.board_right<=myView.board_x_move )

{
myView.board_left=screenWidth-myView.board_length;

                                myView.board_right=screenWidth;

}else{
                myView.board_left+=myView.board_x_move;

                                    myView.board_right+=myView.board_x_move;

        }
        }

        break;

        //上方向键

case KeyEvent.KEYCODE_DPAD_UP:

    if(myView.ball_isRun){

    if( myView.board_alterable_top==myView.board_default_top)

{

    myView.board_alterable_top-=myView.boardYadd;

            myView.board_alterable_bottom-=myView.boardYadd;
            }
        }

        break;  
    //下方向键

   case KeyEvent.KEYCODE_DPAD_DOWN:

if(myView.ball_isRun){

if( myView.board_alterable_top==myView.board_default_top-myView.boardYadd )

{
                myView.board_alterable_top=myView.board_default_top;

myView.board_alterable_bottom=myView.board_alterable_top+myView.board_thickness;
            }
        }

break;  

//返回键
case KeyEvent.KEYCODE_BACK:

this.finish();

break;  

}//end switch
return false;
}

//按键弹起事件

public boolean onKeyUp(int keyCode, KeyEvent event)
{

    return true;
}

public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
{

return true;
}

}

package ab.cc;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.Shader;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class BallView extends SurfaceView implements
SurfaceHolder.Callback, Runnable {

//线程延时控制 
final int ball_sleep=1;//毫秒,延时越大,球速越慢
final int ball_r= 8;//小球半径
final float ball2_r= 8;//底下滚珠小球半径
final int ballXorYadd = 4;//小球的基本位移。测试可行值:2,4

//获取屏幕宽度和高度
int screen_width;//320;
int screen_height;//480;

//砖的属性
int brick_width;//每块砖宽
int brick_height;//每块砖高
boolean brick_exist[];//砖是否存在
int k ;// 列//到for循环里才初始化
int j ;// 行
int brick_left = brick_width*(k-1);//到判断语句才初始化
int brick_right = brick_width*k;
int brick_top = brick_height*j;
int brick_bottom = brick_height*(j+1);

//挡板的属性
int board_length;//挡板长度:80比较合适,可以随意修改,但别超过screen_width
final int boardYadd = 16;//按上下键时挡板y方向位移量。经验证4、8、16可以,12不行
final int board_x_move = 30;//挡板x方向位移量:可以随意自定义
int board_left;//挡板左侧(可变)
int board_right;//挡板右侧(可变)
int board_thickness;//挡板厚度
int board_default_top;//即435,挡板的top面初始位置
int board_alterable_top;//挡板上侧(可变)
int board_alterable_bottom;//挡板下侧(可变)

int ball_default_x;//球的初始x坐标
int ball_default_y;//球的初始y坐标
//球的即时坐标(可变):
int ball_x;//球心横坐标
int ball_y;//球心纵坐标
//球的前一步的y坐标
int ball_previous_y;
int ball_x_speed;//球的横向偏移量//可变
int ball_y_speed;//球的纵向偏移量//可变
boolean ball_isRun;//球是否在动
// 控制循环
boolean mbLoop;
// 定义SurfaceHolder对象
SurfaceHolder mSurfaceHolder = null;
//获得分数
int score;
/* 唤醒渐变渲染 */
Shader mRadialGradient = null;

//------------------------------------------------------------------------------------------------------//
public BallView(Context context) {
super(context);
// 实例化SurfaceHolder
mSurfaceHolder = this.getHolder();
// 添加回调
mSurfaceHolder.addCallback(this);
this.setFocusable(true);

    //获取屏幕宽度和高度
    screen_width = BaomingActivity.screenWidth;//320
    screen_height = BaomingActivity.screenHeight;//480

    //砖的属性
    brick_width = screen_width/5;//每块砖宽64
    brick_height = screen_height/15;//每块砖高32

    //挡板的属性
    board_length = screen_width/4;//挡板长度:80比较合适,可以随意修改,但别超过screen_width
    board_left = (screen_width-board_length)/2;//挡板左侧(可变)
    board_right = (screen_width+board_length)/2;//挡板右侧(可变)
    board_thickness = 5;//挡板厚度
    board_default_top = 13*screen_height/15;//即435,挡板的top面初始位置
    board_alterable_top = board_default_top;//挡板上侧(可变)
    board_alterable_bottom = board_alterable_top+board_thickness;//挡板下侧(可变)

    ball_default_x = screen_width/2;//球的初始x坐标
    ball_default_y = board_default_top - ball_r;//球的初始y坐标
    //球的即时坐标(可变):
    ball_x = ball_default_x;
    ball_y = ball_default_y;
    //球的前一步的y坐标
    ball_previous_y = 0;
    ball_x_speed = ballXorYadd;//球的横向偏移量
    ball_y_speed = ballXorYadd;//球的纵向偏移量

    mbLoop = true;
    ball_isRun = false;
    score=0;

    brick_exist = new boolean[25];
    for (int i = 0; i < 25; i++) {
        brick_exist[i] = true;
    }
    /* 构建RadialGradient对象,设置半径的属性 */
    mRadialGradient = new RadialGradient(ball_x, ball_y, ball_r,//球中心坐标x,y,半径r
            new int[]{Color.WHITE,Color.BLUE,Color.GREEN,Color.RED,Color.YELLOW},//颜色数组
            null,//颜色数组中每一种颜色对应的相对位置,为空的话就是平均分布,由中心向外排布
            Shader.TileMode.REPEAT);//渲染模式:重复
}

public void resetGame(){
    ball_isRun = false;
    score =0;//分数
    ball_x_speed = ballXorYadd;//球的横向偏移量
    ball_y_speed = ballXorYadd;//球的纵向偏移量
    ball_x = screen_width/2;//球心起始横坐标
    ball_y = board_default_top - ball_r;//球心起始纵坐标
    board_left = (screen_width-board_length)/2;//挡板左侧
    board_right = (screen_width+board_length)/2;//挡板右侧
    board_alterable_top = board_default_top;//挡板上侧
    board_alterable_bottom = board_alterable_top+board_thickness;//挡板下侧
    for (int i = 0; i < 25; i++) {
        brick_exist[i] = true;
    }
}

//---------------------------------绘图循环开始----------------------------------
public void run() {

    while (mbLoop&&!Thread.currentThread().isInterrupted()) {
        try {
            Thread.sleep(ball_sleep);
        }
        catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        //球的前一步y坐标
        ball_previous_y = ball_y;

        if (ball_isRun) {
            ballRunning();// 让小球移动
            boardPositionCheck();//检测挡板是否处于“中线”位置,是就随小球上升一步,直至到“上线”
            hitWallCheck();//墙壁碰撞检测
            hitBoardCheck();//挡板碰撞检测
            hitBrickCheck();//砖块碰撞检测
        }
        synchronized (mSurfaceHolder) 
        {
            Draw();
        }
    }
}
//---------------------------------绘图循环结束----------------------------------
//------------------------------------------------------------------------------

//让小球移动
public void ballRunning() {
    ball_x += ball_x_speed;
    ball_y -= ball_y_speed;
}
//朝左或朝右碰撞后小球水平方向逆向
public void ballLeftOrRightHit() {
    ball_x_speed *= -1;
}
//朝上或朝下碰撞后小球竖直方向逆向
public void ballUpOrDownHit() {
    ball_y_speed *= -1;
}

public void ballcornerHit() {
    ball_x_speed *= -1;
    ball_y_speed *= -1;
}

public void ballStraightUp() {//功能没实现,这是多余代码
    ball_x_speed = 0;//注意在其他地方恢复
    ball_y_speed *= -1;
}

//-------------------墙壁碰撞检测开始-------------------------------------
public void hitWallCheck() {
    // 左碰墙
    if (ball_x <= ball_r && 
        ball_y >= ball_r && ball_y <= screen_height) 
    {
        ballLeftOrRightHit();
    // 右碰墙
    }
    if (ball_x >= screen_width - ball_r && //不能写为 else if,因为可能恰好碰到角落。
               ball_y >= ball_r && ball_y <= screen_height) 
    {
        ballLeftOrRightHit();
    }
    // 上碰墙
    if (ball_x >= ball_r && ball_x <= screen_width - ball_r && 
             ball_y <= ball_r + brick_height) //、、、、、、、、、、、、、、、25号修改
    {
        ballUpOrDownHit();
    }
    // 下碰墙
    if (ball_x >= ball_r && ball_x <= screen_width - ball_r && 
             ball_y >= screen_height-ball_r) 
    {
        ballUpOrDownHit();
        if(score<=10){
            score = 0;
        }
        else score-=10;
    }
}
//-------------------墙壁碰撞检测结束-------------------------------------

//-----------------------------挡板碰撞检测开始---------------------------
public void hitBoardCheck() {
    // 下碰挡板正面
    if (ball_x >= ball_r && ball_x <= screen_width - ball_r && //在屏幕内,起码条件
        ball_x >= board_left && ball_x <= board_right && //在挡板X域上方
        ball_y == board_alterable_top - ball_r &&//球面与挡板相切
        ball_previous_y <= board_alterable_top - ball_r  //确定球是从上方下落
        )
    {
        if(board_alterable_top==board_default_top-boardYadd ){//如果弹簧伸张,挡板位于上线
            ballHitBoardlower();//作用:ball_y_move减小;挡板被打下;小球Y向运动反向
        }
        else if(board_alterable_top==board_default_top){//如果弹簧压缩,挡板位于下线
            boardHitBallHigher();//作用:ball_y_move增加;挡板弹上;小球Y向运动反向
        }
    }
    //斜碰挡板右上角//经验证有效
    else if(Math.pow(board_right-ball_x, 2)+Math.pow(board_alterable_top-ball_y,2)<=Math.pow(ball_r, 2)&&
            ball_x>board_right && ball_y<board_alterable_top)
    {
        ballcornerHit();
    }
    //斜碰挡板的左上角//经验证有效
    else if(Math.pow(board_left-ball_x, 2)+Math.pow(board_alterable_top-ball_y,2)<=Math.pow(ball_r, 2)&&
            ball_x<board_left && ball_y<board_alterable_top)
    {
        ballcornerHit();
    }
}
//-----------------------------挡板碰撞检测结束--------------------------

private void boardHitBallHigher() {//增强
    ballUpOrDownHit();//小球Y方向反向,ball_y_speed变为正数
    if(ball_y_speed == ballXorYadd ){
        ball_y_speed += ballXorYadd;//离开挡板后小球Y方向速度增强
    }
    if( boardYadd > ball_y_speed ){//在线程这一轮,小球上升多少,挡板就上升多少。
        board_alterable_top = board_default_top - ball_y_speed;
        board_alterable_bottom= board_alterable_top+board_thickness;//挡板下层面
    }
}

//检测挡板是否处于“中线”位置,是就随小球上升一步,直至到“上线”
private void boardPositionCheck() {//还可直接利用球的位置刷新,board_top与球心相差ball_r
    if(board_alterable_top < board_default_top && board_alterable_top > board_default_top-boardYadd){
        //挡板随球上升
        if(board_alterable_top - ball_y_speed >= board_default_top-boardYadd){
            board_alterable_top -= ball_y_speed;//挡板上层面
            board_alterable_bottom= board_alterable_top+board_thickness;//挡板下层面
        }
        else{
            board_alterable_top = board_default_top-boardYadd;//挡板上层面
            board_alterable_bottom= board_alterable_top+board_thickness;//挡板下层面
        }
    }
}

private void ballHitBoardlower() {//减弱
    board_alterable_top=board_default_top;
    board_alterable_bottom=board_default_top+board_thickness;//挡板被打退
    ballUpOrDownHit();//小球Y方向反向
    if(ball_y_speed==2*ballXorYadd){
        ball_y_speed -= ballXorYadd;//小球Y方向速度减弱
    }
}

//砖块碰撞检测开始-----------------------------------------------------------
public void hitBrickCheck() {
    for (int i = 0; i <25 ; i++) {
    if (brick_exist[i]) {
        k = i % 5+1;// 1,2,3,4,5循环
        j = i / 5+1;// 1,1,1,1,1;2,2,2,2,2,;...;5,5,5,5,5
        brick_left = brick_width*(k-1);
        brick_right = brick_width*k;
        brick_top = brick_height*j;
        brick_bottom = brick_height*(j+1);
        //朝下碰砖的top面 AAAAAAAAAAAAAAAAAAAAA
        if(ball_x >= brick_left && ball_x <= brick_right &&
           ball_y >= brick_top-ball_r && ball_y < brick_top) 
        {
            ballUpOrDownHit();
            brick_exist[i] = false;
            score+=4;
            //朝下正碰2砖中间,i砖右上角检测
            if(k!=5 && ball_x == brick_right)//如果不是第5列砖的右侧边
            {
                //如果砖[i+1]存在
                if(brick_exist[i+1]){
                    brick_exist[i+1] = false;
                    score+=4;
                }
            }
            //朝下正碰2砖中间,i砖左上角检测
            else if(k!=1 && ball_x == brick_left)//如果不是第1列砖的左侧边
            {
                //如果砖[i-1]存在
                if(brick_exist[i-1]){
                    brick_exist[i-1] = false;
                    score+=4;
                }
            }
        }
        //朝上碰砖的bottom面 BBBBBBBBBBBBBBBBB
        else if(ball_x >= brick_left && ball_x <= brick_right &&
                ball_y > brick_bottom&& ball_y <= brick_bottom + ball_r )
        {
            ballUpOrDownHit();
            brick_exist[i] = false;
            score+=4;
            //朝上正碰2块砖中间--i砖的右下角检测
            if(k!=5 && ball_x == brick_right) //如果不是第5列砖的右侧边
            {
                if(brick_exist[i+1]){//如果砖[i+1]存在
                    brick_exist[i+1] = false;
                    score+=4;
                }
            }
            //朝上正碰2块砖中间--i砖的左下角检测
            else if(k!=1 && ball_x == brick_left) //如果不是第1列砖的左侧边
            {
                if(brick_exist[i-1]){//如果砖[i-1]存在
                    brick_exist[i-1] = false;
                    score+=4;
                }
            }
        }
        //朝右碰砖的left面CCCCCCCCCCCCCCCCC
        else if(ball_x >= brick_left -ball_r&&ball_x < brick_left&&
           ball_y >= brick_top && ball_y <= brick_bottom)
        {
            ballLeftOrRightHit();
            brick_exist[i] = false;
            score+=4;
            //朝右正碰2块砖中间,左下角检测
            if(j!=5 && ball_y == brick_bottom)//如果不是第5行砖的下侧边
            {
                if(brick_exist[i+5]){//如果砖[i+5]存在
                    brick_exist[i+5] = false;
                    score+=4;
                }
            }
            //朝右正碰2块砖中间,左上角检测
            else if(j!=1 && ball_y == brick_top)//如果不是第1行砖的上侧边
            {
                if(brick_exist[i-5]){//如果砖[i-5]存在
                    brick_exist[i-5] = false;
                    score+=4;
                }
            }
        }
        //朝左碰砖的right面DDDDDDDDDDDDDDDDDD
        else if(ball_x >= brick_right && ball_x <= brick_right+ball_r&&
           ball_y >= brick_top && ball_y <= brick_bottom)
        {
            ballLeftOrRightHit();
            brick_exist[i] = false;
            score+=4;
            //朝左正碰2块砖中间,右下角检测
            if(j!=5 && ball_y == brick_bottom )//如果不是第5行砖的下侧边
            {
                if(brick_exist[i+5]){//如果砖[i+5]存在
                    brick_exist[i+5] = false;
                    score+=4;
                }
            } 
            //朝左正碰2块砖中间,右上角检测
            else if(j!=1 && ball_y == brick_top )//如果不是第1行砖上侧边
            {
                if(brick_exist[i-5]){//如果砖[i-5]存在
                    brick_exist[i-5] = false;
                    score+=4;
                }
            }
        }
        /////////////////////////////////////////
        //斜碰i砖的左下角EEEEEEEEEEEEEEEEEEEEEEEE
        else if(( i-1<0||(i-1>=0&&!brick_exist[i-1]) ) &&
                (i+5>=25||(i+5<25&&!brick_exist[i+5]) )&&
                Math.pow(brick_left-ball_x, 2)+Math.pow(brick_bottom-ball_y,2)<=Math.pow(ball_r, 2)&&
                ball_x>brick_left-ball_r && ball_x<brick_left && 
                ball_y>brick_bottom && ball_y<brick_bottom+ball_r )
        {
            ballcornerHit();
            brick_exist[i] = false;
            score+=4;
        }
        //斜碰i砖的右下角FFFFFFFFFFFFFFFFFFFFFFFFFF
        else if( (i+1>=25||(i+1<25&&!brick_exist[i+1]) )&&
                 (i+5>=25||(i+5<25&&!brick_exist[i+5]) )&&
                Math.pow(brick_right-ball_x, 2)+Math.pow(brick_bottom-ball_y,2)<=Math.pow(ball_r, 2)&&
                ball_x>brick_right&&ball_x<brick_right+ball_r&&
                ball_y>brick_bottom&&ball_y<brick_bottom+ball_r )
        {
            Log.v("----------", "right bottom hit"+i+":"+brick_exist[i]);
            ballcornerHit(); 
            brick_exist[i] = false;
            score+=4;
        }
        //斜碰i砖的右上角GGGGGGGGGGGGGGGGGGGGGGGG
        else if( (i+1>=25||(i+1<25&&!brick_exist[i+1]) )&&
                (i-5<0||(i-5>0&&!brick_exist[i-5]) )&&
                Math.pow(brick_right-ball_x, 2)+Math.pow(brick_top-ball_y,2)<=Math.pow(ball_r, 2)&&
                ball_x>brick_right && ball_x<brick_right+ball_r&&
                ball_y>brick_top-ball_r && ball_y<brick_top)          
        {
            ballcornerHit();
            brick_exist[i] = false;
            score+=4;
        }
        //斜碰i砖的左上角HHHHHHHHHHHHHHHHHHHHHHHHHH
        else if((i-1<0||(i-1>=0&&!brick_exist[i-1])) &&
                (i-5<0||(i-5>=0&&!brick_exist[i-5])) &&
                Math.pow(brick_left-ball_x, 2)+Math.pow(brick_top-ball_y,2)<=Math.pow(ball_r, 2)&&
                ball_x>brick_left-ball_x && ball_x<brick_left &&
                ball_y>brick_top-ball_r && ball_y<brick_top )
        {
            ballcornerHit();
            brick_exist[i] = false;
            score+=4;
        }
    }//end if
    }//end for  
}//end hitBrickCheck()
//砖块碰撞检测结束-----------------------------------------------------------

//------------------------------------------
public boolean gameOver(){
    int count = 0;
    for(boolean s:brick_exist){
        if(!s){
            count++;
        }
    }
    if(count == 25){
        return true;
    }else{
        return false;
    }

}
//------------------------------------------

//---------------绘图方法开始------------------------
public void Draw() {
    // 锁定画布,得到canvas
    Canvas canvas = mSurfaceHolder.lockCanvas();
    if (mSurfaceHolder == null || canvas == null) {
        return;
    }
    // 绘图
    Paint mPaint = new Paint();
    // 设置取消锯齿效果
    mPaint.setAntiAlias(true);

    mPaint.setColor(Color.GREEN);
    // 绘制矩形--背景
    canvas.drawRect(0, 0, screen_width, brick_height-2, mPaint);

    mPaint.setColor(Color.MAGENTA);
    // 绘制矩形--背景
    canvas.drawRect(0, brick_height-2, screen_width, screen_height, mPaint);

    mPaint.setColor(Color.RED);//设置字体颜色
    mPaint.setTextSize(brick_height-7);//设置字体大小
    canvas.drawText("得分:"+score, 0, brick_height-7, mPaint);

    // 绘制顶层挡板````````````````````````````````````````````````````````25号修改
    mPaint.setColor(Color.BLACK);//设置颜色 
    mPaint.setStrokeWidth(4);//设置粗细
    canvas.drawLine(0, brick_height-2, screen_width, brick_height-2, mPaint);

    for (int i = 0; i <25 ; i++) {
        if (brick_exist[i]) {
            k = i % 5+1;// 1,2,3,4,5循环
            j = i / 5+1;// 1,1,1,1,1;2,2,2,2,2,;...;5,5,5,5,5
            brick_left = brick_width*(k-1);
            brick_right = brick_width*k;
            brick_top = brick_height*j;
            brick_bottom = brick_height*(j+1);

            mPaint.setStyle(Paint.Style.FILL);// 设置实心画笔
            mPaint.setColor(Color.BLACK);
            canvas.drawRect(brick_left+1, brick_top+1, brick_right-1,brick_bottom-1, mPaint);

            mPaint.setStyle(Paint.Style.STROKE);// 设置空心画笔
            mPaint.setStrokeWidth(2);//设置粗细
            mPaint.setColor(Color.RED);
            canvas.drawRect(brick_left+3, brick_top+3, brick_right-3,brick_bottom-3, mPaint);
        }
    }
    // 设置实心画笔
    mPaint.setStyle(Paint.Style.FILL);
    {
        mPaint.setShader(mRadialGradient);
        canvas.drawCircle(ball_x, ball_y, ball_r, mPaint);
    }   

    Paint mPaint2 = new Paint();
        // 设置取消锯齿效果
    mPaint2.setAntiAlias(true); 
    // 设置实心画笔
    mPaint2.setStyle(Paint.Style.FILL);
    {   
    mPaint2.setColor(Color.BLACK);
    /* 绘制矩形挡板 */
    canvas.drawRect(board_left, board_alterable_top, board_right, board_alterable_bottom,mPaint2);
    float board2_bottom = screen_height - 2*ball2_r;//164
    float board2_top = board2_bottom - 4;//160
    //线段端点坐标数组
    float x0 = board_left+(board_right-board_left)/4;
    float y0 = board_alterable_bottom;//440或者444
    float springAdd = (board2_top- board_alterable_bottom)/8;//即2.5或者2:弹簧小线段的y向长度
    float springWidth = 5.0f;//弹簧小线段的x向长度
    float x1 = x0 - springWidth;
    float y1 = y0 + springAdd;
    float x2 = x0 + springWidth;
    float y2 = y0 + 3*springAdd;
    float x3 = x1 ;
    float y3 = y0 + 5*springAdd;
    float x4 = x2;
    float y4 = y0 + 7*springAdd;
    float x5 = x0 ;
    float y5 = board2_top;//即460 
    float between_spring = (board_right-board_left)/2;
    float pts[] = { x0,y0,x1,y1,
                    x1,y1,x2,y2,
                    x2,y2,x3,y3,
                    x3,y3,x4,y4,
                    x4,y4,x5,y5};
    float pts2[] = {x0+between_spring,y0, x1+between_spring,y1,
                    x1+between_spring,y1, x2+between_spring,y2,
                    x2+between_spring,y2, x3+between_spring,y3,
                    x3+between_spring,y3, x4+between_spring,y4,
                    x4+between_spring,y4, x5+between_spring,y5};
    mPaint2.setStrokeWidth(2);//设置弹簧粗细
    //绘制2个弹簧
    canvas.drawLines(pts, mPaint2);
    canvas.drawLines(pts2, mPaint2);
    //绘制下层挡板
    canvas.drawRect(board_left, board2_top, board_right, board2_bottom,mPaint2);
    mPaint2.setColor(Color.BLACK);//
    // 绘制最下面的两个“轮子”(圆心x,圆心y,半径r,p) 
    canvas.drawCircle(board_left+ball2_r, screen_height-ball2_r, ball2_r, mPaint2);//圆
    canvas.drawCircle(board_right-ball2_r, screen_height-ball2_r, ball2_r, mPaint2);
    mPaint2.setColor(Color.WHITE);//


    }//实心画笔mPaint2结束

    if(gameOver()){ 

// mbLoop = false;//注释掉的话GAME OVER后也可重启
ball_isRun = false;
mPaint2.setColor(Color.BLACK);//设置字体颜色
mPaint2.setTextSize(40.0f);//设置字体大小
canvas.drawText("GAME OVER", screen_width/32+40, screen_height/16*9-70, mPaint2);
mPaint2.setTextSize(20.0f);//设置字体大小
canvas.drawText("Press \"MENU\" button to restart,",
screen_width/32, //320/32=10
screen_height/16*9, //480/16=30,30*9=270
mPaint2);
canvas.drawText("Press \"BACK\" button to exit.",
screen_width/32, //320/32=10
screen_height/16*10, //480/16=30,30*10=300
mPaint2);
}
// 绘制后解锁,绘制后必须解锁才能显示
mSurfaceHolder.unlockCanvasAndPost(canvas);
}// end of Draw()
//---------------------绘图方法结束-----------------------------------------------

// 在surface的大小发生改变时激发
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
}

// 在surface创建时激发
public void surfaceCreated(SurfaceHolder holder) {
    new Thread(this).start();// 开启绘图线程
}

// 在surface销毁时激发
public void surfaceDestroyed(SurfaceHolder holder) {
    // 停止循环
    mbLoop = false;
}

}
能否回答的详细一点,学的时间短,求帮忙

suannai0314
鹳狸媛 楼主的这个问题解决了么?下边的答案能解决问题么?如果可以麻烦点击答案旁的√采纳哦~如果没有也可以将自己的答案贴上然后进行采纳的。
接近 7 年之前 回复

2个回答

放到你结束按钮的点击事件里:

Intent intent=new Intent(this,BaomingActivity.class);
startActivity(intent);
qi15637293252
你丫的唯一 额 放到jieshu()里 还是kaishi()里? 有点不懂啊 能不能具体点 谢谢了
接近 7 年之前 回复


Intent intent=new Intent(this,BaomingActivity.class);
startActivity(intent);
放到开始里。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android 调用系统的添加联系人界面,如何获得添加的联系人的名字或者电话号码?

如题,请问我怎么样才能获得返回结果呢?意思就是我要添加联系人,并在保存的时候知道这个联系人的号码和姓名? 我调用startActivityForResult data直接返回null,resultCode 都不对,返回0,请问我该怎么写才能获得返回的结果?

Android 虚拟机没有运行,一直是主界面

虚拟机运行后一直是主界面,在eclipse上显示已经成功,在自己手机上运行一直是安装应用程序,求教大神这个是什么情况。。。小白第一次学习Android开发 ![![图片说明](https://img-ask.csdn.net/upload/201604/07/1460032484_295070.png)图片说明](https://img-ask.csdn.net/upload/201604/07/1460032473_867688.jpg)

android自定义主屏幕应用

android机如何设置自己研发的app作为主屏幕应用,即按home键和menu键都不能退回到原来的主屏幕界面

android 界面跳转和动画同时运行是出现的问题。

我想做的是,打开一个客户端(安卓平台),然后显示一段动画,动画结束之后就跳转到另外一个界面。但是,这两个功能单个实现的时候都没有问题,两个一起运行是就出问题了,编译通过,然后启动程序,开始演示动画,当动画演示完毕,准备跳转界面的时候,程序就出问题了,就是直接退出了。代码如下。 public class Open extends Activity{ private ImageView imageView; private AnimationDrawable background; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.open); donghua(); turn(); } public void donghua(){ //显示动画函数,动画播放时间为5秒 imageView = (ImageView) findViewById(R.id.openimageView); imageView.setBackgroundResource(R.drawable.dong); background = (AnimationDrawable) imageView.getBackground(); background.start(); } public void turn(){ //七秒后界面跳转,问题就处在第七秒, new Handler(){ public void handleMessage(android.os.Message msg){ if(msg.what==1){ Intent intent = new Intent(Open.this, Pdata.class); startActivity(intent); } }; }.sendEmptyMessageDelayed(1,7000); } } 那个跳转的Pdata应该没有问题,我单独使用跳转函数的时候可以进行跳转,只是两个一起的时候就不行了。下面是logcat的结果。 03-29 03:40:18.302: E/AndroidRuntime(663): FATAL EXCEPTION: main 03-29 03:40:18.302: E/AndroidRuntime(663): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.easymin.logindemo/com.marco.logindemo.Pdata}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> 这是最开始出错的前几行。也百度到了类似的问题,然后改了还是不行。求大神!!

测试安卓APP进入程序然后退出到主界面,怎样写个小程序,供测试,求大神们解答呀

测试安卓APP进入程序然后退出到主界面,怎样写个小程序,供测试,求大神们解答呀

新手开发安卓app的欢迎界面

程序已经写好了 想加一个图片作为欢迎页面 再点击一下进入主页面 没什么思路 是要在做一个界面然后加个按钮吗? 希望大神解答 为什么这样修改之后做程序会停止运行呢? 这是修改之前 ``` protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SearchView searchview = (SearchView)findViewById(R.id.searchView); searchview.setOnQueryTextListener(this); //初始化载入数据库的数据 list = Utils.getList(); if(list.isEmpty()) loadFromDatabase(list); //先检查缓存,若没有数据再从数据库加载 Utils.MillisToDate(list); listAdapter = new SimpleAdapter(this,list,R.layout.list_item,new String[]{"datetime","content"}, new int[]{R.id.datetime,R.id.content}); setListAdapter(listAdapter); //将备忘录数据显示出来 Button button = (Button)findViewById(R.id.createButton); button.setOnClickListener(new ClickListener()); getListView().setOnItemClickListener(new ListItemClickListener()); getListView().setOnItemLongClickListener( new ItemLongClickListener()); } ``` 这是修改之后 app会停止运行 ``` protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.jump); /* 以findViewById()取得Button对象,并添加onClickListener */ Button b1 = (Button) findViewById(R.id.jumpbutton); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { jumpToLayout2(); } }); } protected void jumpToLayout2() { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SearchView searchview = (SearchView)findViewById(R.id.searchView); searchview.setOnQueryTextListener(this); //初始化载入数据库的数据 list = Utils.getList(); if(list.isEmpty()) loadFromDatabase(list); //先检查缓存,若没有数据再从数据库加载 Utils.MillisToDate(list); listAdapter = new SimpleAdapter(this,list,R.layout.list_item,new String[]{"datetime","content"}, new int[]{R.id.datetime,R.id.content}); setListAdapter(listAdapter); //将备忘录数据显示出来 Button button = (Button)findViewById(R.id.createButton); button.setOnClickListener(new ClickListener()); getListView().setOnItemClickListener(new ListItemClickListener()); getListView().setOnItemLongClickListener( new ItemLongClickListener()); } ``` 明明就是加了一个按钮判断加xml跳转 结果app都打不开 请问为什么会这样呢?

从主页面进入一个继承ListActivity的界面

从主页面点击按钮进入一个带列表视图的界面,但是点击按钮却使程序停止运行了。 到底是哪里有问题啊 这是列表视图的XML图片![图片说明](https://img-ask.csdn.net/upload/201610/20/1476942575_453542.png) 这是主页面设置的按钮 ![图片说明](https://img-ask.csdn.net/upload/201610/20/1476942598_193296.png) 这是显示那个界面列表视图的活动 ![图片说明](https://img-ask.csdn.net/upload/201610/20/1476942668_641130.png) 这是配置文件 ![图片说明](https://img-ask.csdn.net/upload/201610/20/1476942689_214047.png)

安卓中登录界面的用户名传递到下一个界面

![图片说明](https://img-ask.csdn.net/upload/201605/03/1462278790_166520.png) 大家帮忙看看啊 怎么传递loginName啊

android 动态添加了button后,怎么给button设置监听器?

android 动态添加了button后,怎么给button设置监听器? 类似微信一样,我收到了语音消息,我在主界面上添加了一个按钮,这个按钮怎么添加监听器?点击后就可以播放我收到的那条消息。 我已经用listview动态添加item(是一个button)了,就是不知道每一个item怎么设置点击后播放不同的声音。。。 private void send() { if(flag==0)//发送的是文字 { sendContString = mEditTextContent.getText().toString(); if (sendContString.length() > 0) { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(getDate()); entity.setName("syskey"); entity.setMsgType(false); entity.setText(sendContString); entity.setKind(1); mDataArrays.add(entity); new Thread(new Runnable() { @Override public void run() { try { new Client().send(ip, port,sendContString,1,Aname,Bname); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } } else//发送的是语音 { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(getDate()); entity.setName("syskey"); entity.setMsgType(false);//表示是自己发的 entity.setText(pathWav);//录音后存放的声音的地址 entity.setKind(2);//种类是2表示是声音 mDataArrays.add(entity); } mAdapter.notifyDataSetChanged();//刷新 mEditTextContent.setText(""); mListView.setSelection(mListView.getCount() - 1);//指向最后一个 } /////////////////////分割线//////////////////////////// package com.myweixin; import android.R.integer; import android.content.Context; import android.database.DataSetObserver; import android.media.MediaPlayer; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.TextView; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ChatMsgViewAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private List<ChatMsgEntity> coll; private Context ctx; private ChatMsgEntity entity; private LayoutInflater mInflater; private ViewHolder viewHolder = null; private String position1; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) { ctx = context; this.coll = coll; mInflater = LayoutInflater.from(context); } public int getCount() { return coll.size(); } public Object getItem(int position) { return coll.get(position); } public long getItemId(int position) { return position; } public int getItemViewType(int position) { // TODO Auto-generated method stub ChatMsgEntity entity = coll.get(position); if (entity.getMsgType()) { return IMsgViewType.IMVT_COM_MSG; }else{ return IMsgViewType.IMVT_TO_MSG; } } public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } public View getView(int position, View convertView, ViewGroup parent) { this.position1=position+""; entity = coll.get(position); boolean isComMsg = entity.getMsgType(); if (convertView == null) { if (isComMsg) { convertView = mInflater.inflate(R.layout.chatting_item_msg_text_left, null); }else{ convertView = mInflater.inflate(R.layout.chatting_item_msg_text_right, null); } viewHolder = new ViewHolder(); viewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime); viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username); viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent); viewHolder.isComMsg = isComMsg; //添加监听事件 // if(entity.getKind()==2) // { // // viewHolder.tvContent.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) {//设置监听器 // //play(viewHolder.tempTextView.getText().toString()); // // } // }); // } convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvSendTime.setText(entity.getDate()); viewHolder.tvUserName.setText(entity.getName()); if(entity.getKind()==1) viewHolder.tvContent.setText(entity.getText()); else{ viewHolder.tvContent.setText("语音-点击播放"); viewHolder.tvContent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {//设置监听器 Log.i("BBB", position1); } }); } return convertView; } static class ViewHolder { public TextView tvSendTime; public TextView tvUserName; public TextView tvContent; public TextView tempTextView; public boolean isComMsg = true; } private void play(String url) { try { MediaPlayer mp = new MediaPlayer(); mp.reset(); mp.setDataSource(url); mp.prepare(); mp.start(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

有哪位大神能帮忙看一下,跳转到这个界面时闪退

public class MainTabHost extends TabActivity { private TabHost tabHost; private RadioGroup radioGroup; // Tab选项卡的图标数组 private int[] tabIconViewArray = { R.drawable.tab_icon1, R.drawable.tab_icon2, R.drawable.tab_icon3, R.drawable.tab_icon4, R.drawable.tab_icon5 }; // Tab选项卡的文字数组 private String[] tabNameTextArray = { "档案", "血压", "血糖", "听诊", "帮助" }; // Tab选项卡中的内容(类)数组 private Class[] tabContentClassArray = { com.example.HeartAuscultation.HeartListen.class, com.example.BloodPressure.BloodPressureActivity.class, com.example.BloodSugar.BloodSugarActivity.class, com.example.HeartAuscultation.HeartListen.class, SystemHelp.class }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_tab_host); // 为每一个选项卡设置按钮、图标、文字和内容,将Tab按钮添加进Tab选项卡中 tabHost = getTabHost(); for (int i = 0; i < tabContentClassArray.length; i++) { TabSpec tabSpec = tabHost.newTabSpec(tabNameTextArray[i]) .setIndicator(tabNameTextArray[i]) .setContent(getTabItemIntent(i)); tabHost.addTab(tabSpec); } initData(); } // 对选项卡上的每个按钮进行监听,以实现模块的切换 private void initData() { radioGroup = (RadioGroup) findViewById(R.id.main_radiogroup); radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.RadioButton0: tabHost.setCurrentTabByTag(tabNameTextArray[0]); break; case R.id.RadioButton1: tabHost.setCurrentTabByTag(tabNameTextArray[1]); break; case R.id.RadioButton2: tabHost.setCurrentTabByTag(tabNameTextArray[2]); break; case R.id.RadioButton3: tabHost.setCurrentTabByTag(tabNameTextArray[3]); break; case R.id.RadioButton4: tabHost.setCurrentTabByTag(tabNameTextArray[4]); break; } } }); ((RadioButton) radioGroup.getChildAt(0)).toggle(); } // 给Tab选项卡设置Activity内容,并且将LoginActivity传入的swapUsername数据转让每个Intent携带分发给每个Tab选项 private Intent getTabItemIntent(int index) { Bundle swapData = new Bundle(); swapData.putString("swapUsername", this.getBundleData()); Intent intent = new Intent(this, tabContentClassArray[index]); intent.putExtras(swapData); return intent; } // 获取启动该MainTabHostAcitivity的Intent,传入Intent携带的 username数据 public String getBundleData() { Intent intent = getIntent(); Bundle data = intent.getExtras(); String swapData = data.getString("username").toString(); return swapData; } } ![图片说明](https://img-ask.csdn.net/upload/202002/15/1581769764_27160.png) ``` ```

如何修改下面的java程序,我希望当点击登陆按钮时候,能够跳转到聊天界面。我已经链接了数据库了

我的要求如下,在文本框输入账号和密码,连接数据库验证码账号和密码是否一致,如果一致就当点击登陆按钮时候就跳转到聊天界面。麻烦你帮我修改一下程序, package sql; import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; class liaotian extends JFrame implements ActionListener{ JPanel jpanel1; TextArea textArea1; TextField textField3; JButton jButton1; liaotian(){ this.setTitle("对话"); this.setSize(600,600); this.setVisible(true); jpanel1=new JPanel(); textArea1=new TextArea(15,15); jButton1=new JButton("发送"); textField3=new TextField(10); jpanel1.add(textArea1); jButton1.addActionListener(this); jpanel1.add(jButton1);jpanel1.add(textField3); this.add(jpanel1); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jButton1){ textArea1.setText(textField3.getText()); textField3.setText(""); }}} public class lianxi2 extends JFrame implements ActionListener{ JPanel jpanel; Label label1; TextField textField1; Label label2; TextField textField2; JButton jButton; static String col11,col12; public lianxi2(){ super("登陆"); jpanel=new JPanel(); this.setVisible(true); this.setSize(600,600); label1=new Label("账号"); textField1=new TextField(15); label2=new Label("密码"); textField2=new TextField(15); jButton=new JButton("登陆"); jpanel.add(label1); jpanel.add(textField1); jpanel.add(label2); jpanel.add(textField2); jpanel.add(jButton); this.add(jpanel); jButton.addActionListener(this); //给jbutton加上监听 } public static void main(String[] args) { lianxi2 lt = new lianxi2(); try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载数据库驱动 Connection conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;Database=denglu","sa","123456");//链接数据库 Statement statement=conn.createStatement(); ResultSet rs = statement.executeQuery("select * from denglu "); while(rs.next()){ col11= rs.getString("zhanghao"); col12 = rs.getString("mima"); } conn.close(); } catch(Exception e){ e.printStackTrace(); } } public void actionPerformed(ActionEvent e) { if(e.getSource()==jButton){ if(textField1.getText()==col11){ if(textField2.getText()==col12){ liaotian m=new liaotian(); m.setVisible(true); } } } }}

小白Android Studio代码运行后模拟器上只有Hello World!

``` package com.example.firstapp; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Log; import android.view.View; import java.util.Random; public class MyView extends View { MyThread mythread; private Paint paint;//画笔 private RectF rectF=new RectF(150,150,380,380); private int sweepAngle=0;//弧的当前度数 private int sweepAngleAdd=20;//每次弧增加的度数 private Random random=new Random(); private boolean running=true;//控制循环 public MyView(Context context, AttributeSet attrs){ super(context,attrs); init(context,attrs); } public MyView(Context context){ this(context,null); } private void init(Context context,AttributeSet attrs){ paint=new Paint(); paint.setTextSize(60); } protected void logic(){ sweepAngle+=sweepAngleAdd; //随机设置画笔颜色 int r=random.nextInt(255); int g=random.nextInt(255); int b=random.nextInt(255); paint.setARGB(255,r,g,b); if(sweepAngle>=360){ sweepAngle=0; } } private class MyThread extends Thread{ @Override public void run(){ while(running){ logic(); postInvalidate();//重新绘制会调用ondraw() try { Thread.sleep(200); }catch (InterruptedException e){ e.printStackTrace(); } } } } @Override protected void onDraw(Canvas canvas){ Log.i("MyView","onDraw"); if(mythread==null){ mythread=new MyThread(); mythread.start(); }else{ /* * 第一个参数:rectF 左上的坐标x,y,右下的坐标x,y * 第二个参数:弧形开始的角度 * 第三个参数:弧形结束的角度 * 第四个参数:true:画扇形,false:画弧线 * 第五个参数:画笔 * */ canvas.drawArc(rectF,0,sweepAngle,true,paint); } } @Override protected void onDetachedFromWindow(){ running=false; super.onDetachedFromWindow(); } } ``` 模拟器上只有Hello World,写的东西只有MyView类,是不是要加什么,还是代码有错

安卓点击按钮不能实现跳转 模拟器运行软件点按钮就闪退

点登录按钮就闪退![图片说明](https://img-ask.csdn.net/upload/201906/28/1561723660_759733.jpg) 下面是代码 ```package com.example.test; import android.app.Activity; import com.example.test.R; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Denglu extends Activity { Button denglu,zhuche; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.denglu); denglu=(Button)findViewById(R.id.denglu); zhuche=(Button)findViewById(R.id.zhuche); denglu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(Denglu.this,RegisterActivity.class); startActivity(intent); } }); zhuche.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //为了跳转到注册界面,并实现注册功能 Intent intent=new Intent(Denglu.this,LostFindActivity.class); startActivity(intent); finish(); } }); } } ``` 第二个 package com.example.test; import android.app.Activity; import com.example.test.R; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class LostFindActivity extends Activity { Button register; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.zc); register =(Button)findViewById(R.id.register); register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(LostFindActivity.this,RegisterActivity.class); startActivity(intent); Toast.makeText(LostFindActivity.this, "注册成功,跳转中", Toast.LENGTH_LONG).show(); finish(); } }); } } 第三个 package com.example.test; import com.example.test.MainActivity; import com.example.test.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class RegisterActivity extends Activity { Button denglu; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.dl); denglu=(Button)findViewById(R.id.denglu); denglu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(RegisterActivity.this,MainActivity.class); startActivity(intent); Toast.makeText(RegisterActivity.this, "登录成功,跳转中", Toast.LENGTH_LONG).show(); finish(); } }); } } 跳转不了 思路是先注册然后登陆 进主界面 下面是报错信息 ![图片说明](https://img-ask.csdn.net/upload/201906/28/1561724541_821567.jpg) 萌新一个 求各位大佬帮帮忙

Android AppWidget无法更新控件

自定义的类AppWidgetProvider中经常性无法更新桌面组件的RemoteViews,有时候添加多几个才出现一次正常显示和响应点击事件的,如下: ``` @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); views.setImageViewResource(R.id.img, R.drawable.pic); views.setOnClickPendingIntent(R.id.layout, startActivity(context)); appWidgetManager.updateAppWidget(appWidgetIds, views); } ``` 网上的文章基本都查过了,所有方法我都测试过了,我在activity中发广播也能够接收,但就是没办法更新RemoteViews。 ``` Intent intent = new Intent(this, WidgetProvider.class); intent.setAction(action); sendBroadcast(intent); ```

android studio无法保存设置

Unable to save settings Failed to save settings. Please restart Android Studio 右上角这样显示,请问怎么解决?

android studio中关于v4包的问题?

**这是错误提示:** 错误: 对于add(int,ChatFragment), 找不到合适的方法 方法 FragmentTransaction.add(Fragment,String)不适用 (参数不匹配; int无法转换为Fragment) 方法 FragmentTransaction.add(int,Fragment)不适用 (参数不匹配; ChatFragment无法转换为Fragment) ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089418_48233.png) **代码图片** ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089670_644370.png) ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089596_474211.png) ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089602_315981.png) ** 下面是代码** ``` package com.uitest.administrator.shoulderby.activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.KeyEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.uitest.administrator.shoulderby.R; import com.uitest.administrator.shoulderby.fragment.HomeFragment; import com.uitest.administrator.shoulderby.fragment.JobFragment; import com.uitest.administrator.shoulderby.fragment.MeFragment; import com.uitest.administrator.shoulderby.fragment.ChatFragment; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; /* 主界面 */ public class MainActivity extends FragmentActivity { @Bind(R.id.fl_main_content) FrameLayout flMainContent; @Bind(R.id.iv_main_home) ImageView ivMainHome; @Bind(R.id.tv_main_home) TextView tvMainHome; @Bind(R.id.ll_main_home) LinearLayout llMainHome; @Bind(R.id.iv_main_job) ImageView ivMainJob; @Bind(R.id.tv_main_job) TextView tvMainJob; @Bind(R.id.ll_main_job) LinearLayout llMainJob; @Bind(R.id.iv_main_me) ImageView ivMainMe; @Bind(R.id.tv_main_me) TextView tvMainMe; @Bind(R.id.ll_main_me) LinearLayout llMainMe; @Bind(R.id.iv_main_chat) ImageView ivMainChat; @Bind(R.id.tv_main_chat) TextView tvMainChat; @Bind(R.id.ll_main_chat) LinearLayout llMainChat; private FragmentManager fragmentManager; private HomeFragment homeFragment; private MeFragment meFragment; private ChatFragment chatFragment; private JobFragment jobFragment; private FragmentTransaction transaction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //初始化HOME界面,默认进入软件是HOME界面 fragmentManager=getSupportFragmentManager(); transaction = fragmentManager.beginTransaction(); homeFragment = new HomeFragment(); transaction.add(R.id.fl_main_content, homeFragment); transaction.commit(); } //设置点击监听事件 @OnClick({R.id.ll_main_home, R.id.ll_main_me,R.id.ll_main_chat, R.id.ll_main_job}) public void changeTab(View v) { transaction = fragmentManager.beginTransaction(); //设置隐藏Fragment/图片/颜色 hideFragment(); switch (v.getId()) { case R.id.ll_main_home: if (homeFragment == null) { homeFragment = new HomeFragment(); transaction.add(R.id.fl_main_content, homeFragment); } transaction.show(homeFragment); ivMainHome.setImageResource(R.drawable.bottom02); tvMainHome.setTextColor(getResources().getColor(R.color.home_back_selected)); break; case R.id.ll_main_job: if (jobFragment == null) { //当jobFragment不存在时,进行初始化 jobFragment = new JobFragment(); transaction.add(R.id.fl_main_content, jobFragment); //添加jobFragment } transaction.show(jobFragment); //显示jobFragment ivMainJob.setImageResource(R.drawable.bottom08); tvMainJob.setTextColor(getResources().getColor(R.color.home_back_selected)); break; case R.id.ll_main_chat: if (chatFragment == null) { chatFragment = new ChatFragment(); transaction.add(R.id.fl_main_content, chatFragment); } transaction.show(chatFragment); ivMainChat.setImageResource(R.drawable.bottom04); tvMainChat.setTextColor(getResources().getColor(R.color.home_back_selected)); break; case R.id.ll_main_me: if (meFragment == null) { meFragment = new MeFragment(); transaction.add(R.id.fl_main_content, meFragment); } transaction.show(meFragment); ivMainMe.setImageResource(R.drawable.bottom06); tvMainMe.setTextColor(getResources().getColor(R.color.home_back_selected)); break; } transaction.commit(); } //设置隐藏Fragment/图片/颜色 private void hideFragment() { if (homeFragment != null) { ivMainHome.setImageResource(R.drawable.bottom01); tvMainHome.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(homeFragment); } if (jobFragment != null) { ivMainJob.setImageResource(R.drawable.bottom07); tvMainJob.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(jobFragment); } if (chatFragment != null) { ivMainChat.setImageResource(R.drawable.bottom03); tvMainChat.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(chatFragment); } if (meFragment != null) { ivMainMe.setImageResource(R.drawable.bottom05); tvMainMe.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(meFragment); } } private boolean flag = true; //flag 用于判断是否是第一次点击返回键 private static final int WHAT_RESET_BACK = 1; private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case WHAT_RESET_BACK: flag = true; break; } } }; //重写onKeyDown,当点击两次返回键退出程序 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && flag) { Toast.makeText(this, "再点击一次,退出当前应用", Toast.LENGTH_SHORT).show(); flag = false; handler.sendEmptyMessageDelayed(WHAT_RESET_BACK, 2000); //设置2s的延迟,用于处理flag的值 return true; } return super.onKeyDown(keyCode, event); } //为了避免内存泄漏,应该在Destroy()移除未被执行的消息 @Override protected void onDestroy() { super.onDestroy(); handler.removeCallbacksAndMessages(null); } } ```

请教:微信小程序(有随机数)页面不能重新加载(刷新)问题。

请教:微信小程序(有随机数)页面不能重新加载(刷新)问题。 小程序共3个页面,在页面间可任意跳转, 每页上方都想随机展示几幅图 且希望每次切换页面时图片随机不同 (采用了随机数) 在index.js中我写了: ``` Page({ data: { imglist1: [ '/pic/pic1/tt' + Math.ceil(Math.random() * 9) + '.jpg', '/pic/pic1/tt' + Math.ceil(Math.random() * 9) + '.jpg', '/pic/pic1/tt' + Math.ceil(Math.random() * 9) + '.jpg', // { url: '/pic/pic1/tt' + Math.ceil(Math.random() * 9) + '.jpg' }, ], }) ``` ---------------------------- 在index.wxml中我写了: ``` <swiper class="swipers1"> <block wx:for="{{imglist1}}"> <swiper-item> <image class="imgstyle1" mode="aspectFill" src="{{item}}"></image> </swiper-item> </block> </swiper> ``` ---------------------------- 目前症状: 初次进入小程序,图片变化了 但无论怎么切换页面,图片都不变 (随机数没被重新执行?) 使用了wx.switchTab,不起作用。 请高手指教。 感谢! 芝罘码农CHR

问一下大神,如何点击一个ViewPager实现页面的跳转

![图片说明](https://img-ask.csdn.net/upload/201502/13/1423818106_728971.png) 我这样做点击没反应啊,然后我给ViewPager里面每一个view添加点击事件也没用。![图片说明](https://img-ask.csdn.net/upload/201502/13/1423818303_717605.png)程序没报错,要跳转的activity也已经注册了。

“构造一个虚拟位置信息给谷歌地图,让其定位错误”失败

用以下代码“构造一个虚拟位置信息给谷歌地图,让其定位错误”无法实现,给位大神指点迷津,小弟开始研究Android编程不久,有点小白望谅解 正常情况下是:在本应用横纵有一个数据库,记录用户对不同需要获取位置信息的应用按精确度进行分类,分别为城镇级,精确级,街道级,不同级别对应的位置模糊程度不同,虚构的位置信息也不同 代码如下: package com.example.hermit; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Random; import android.app.ActivityManager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.database.Cursor; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.util.Log; import android.widget.Toast; public class service extends Service { LocationManager locationManager; private PackageManager pm;// Package Manager(包管理)-用来找到关于安装在设备上的应用程序包的相关信息。 private ArrayList<String> default1 = new ArrayList<String>();// 城镇;创建default1来保存字符串数组 private ArrayList<String> default2 = new ArrayList<String>();// 街道;创建default2来保存字符串数组 private ArrayList<String> default3 = new ArrayList<String>();// 精准;创建default3来保存字符串数组 private ArrayList<String> user1 = new ArrayList<String>();// 城镇 private ArrayList<String> user2 = new ArrayList<String>();// 街道 private ArrayList<String> user3 = new ArrayList<String>();// 精准 private Strategy_DB DB = new Strategy_DB(this); double test1; private String mocLocationProvider; private String currentProvider; private String Provider; // Android的location定义新的变量 private Location currentLocation; Location LOCtmp; Location Location; Location Loc; Location l; // 精确 double latitude;// 经度 double longitude;// 纬度 // 城镇 double latitude1; double longitude1; // 街道 double latitude2; double longitude2; double ltd_tmp; double lng_tmp; private String AN; private String TAG = "service"; static final int DELAY = 4000; // 相当于定义常量DELAY String name; int flag = 0; static final String ACTION_FOREGROUND = "com.example.android.apis.FOREGROUND"; static final String ACTION_BACKGROUND = "com.example.android.apis.BACKGROUND"; private final IBinder mBinder = new localBinder(); /* * Handler在android里负责发送和处理消息。它的主要用途有:   1)按计划发送消息或执行某个Runnanble(使用POST方法); *   2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)/用来向不属于自己的线程的队列中加入某个动作 */ Handler handler; Runnable runnable; private static final Class<?>[] mSetForegroundSignature = new Class[] { boolean.class }; private static final Class<?>[] mStartForegroundSignature = new Class[] { int.class, Notification.class }; private static final Class<?>[] mStopForegroundSignature = new Class[] { boolean.class }; private NotificationManager mNM; private Method mSetForeground; private Method mStartForeground; private Method mStopForeground; private Object[] mSetForegroundArgs = new Object[1]; private Object[] mStartForegroundArgs = new Object[2]; private Object[] mStopForegroundArgs = new Object[1]; /* *  可以看出,对于一个对象的方法调用来说,如果这个方法能够被分派出去, * 如上面的“hello”方法,可以在InvokeTestor1类中找到,就被分派给InvokeTestor1类的“hello”方法; * 如果不能被分派,如上面的“foo”方法,则调用“invokeMethod”方法 */ void invokeMethod(Method method, Object[] args) { try { method.invoke(this, args); } catch (InvocationTargetException e) { // Should not happen. Log.w("ApiDemos", "Unable to invoke method", e); } catch (IllegalAccessException e) { // Should not happen. Log.w("ApiDemos", "Unable to invoke method", e); } } /** * This is a wrapper around the new startForeground method, using the older * APIs if it is not available. */ void startForegroundCompat(int id, Notification notification) { // If we have the new startForeground API, then use it. if (mStartForeground != null) { mStartForegroundArgs[0] = Integer.valueOf(id); mStartForegroundArgs[1] = notification; Log.d(TAG, "Updater running"); invokeMethod(mStartForeground, mStartForegroundArgs); return; } // Fall back on the old API. mSetForegroundArgs[0] = Boolean.TRUE; Log.d(TAG, "Updater sdsf"); invokeMethod(mSetForeground, mSetForegroundArgs); mNM.notify(id, notification); } /** * This is a wrapper around the new stopForeground method, using the older * APIs if it is not available. */ void stopForegroundCompat(int id) { // If we have the new stopForeground API, then use it. if (mStopForeground != null) { mStopForegroundArgs[0] = Boolean.TRUE; invokeMethod(mStopForeground, mStopForegroundArgs); return; } // Fall back on the old API. Note to cancel BEFORE changing the // foreground state, since we could be killed at that point. mNM.cancel(id); mSetForegroundArgs[0] = Boolean.FALSE; invokeMethod(mSetForeground, mSetForegroundArgs); } public class localBinder extends Binder { service getService() { return service.this; } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub Log.i(TAG, "this is on binder"); return null; } public void OnCreate() { // 获得系统级的服务Notification Manager,调用getSystemService()方法实现 mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 为了兼容Android1的代码。即如果mStartForeground / mStopForeground // 为空就表示是Android1的环境。 try { mStartForeground = getClass().getMethod("startForeground", mStartForegroundSignature); mStopForeground = getClass().getMethod("stopForeground", mStopForegroundSignature); return; } catch (NoSuchMethodException e) { // Running on an older platform. mStartForeground = mStopForeground = null; } try { mSetForeground = getClass().getMethod("setForeground", mSetForegroundSignature); } catch (NoSuchMethodException e) { // 抛出一个异常 throw new IllegalStateException( "OS doesn't have Service.startForeground OR Service.setForeground!"); } } public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "recived start id" + startId + ":" + intent); // //获得系统级的服务Location Manager,调用getSystemService()方法实现 locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); // mocLocationProvider 存放gps信息 mocLocationProvider = LocationManager.GPS_PROVIDER; // 根据设置的Criteria对象,获取最符合此标准的provider对象 currentProvider = locationManager.getProvider( LocationManager.GPS_PROVIDER).getName(); // 获取网络位置信息 Provider = locationManager .getProvider(LocationManager.NETWORK_PROVIDER).getName(); // 根据当前provider对象获取最后一次位置信息 l = locationManager.getLastKnownLocation(Provider); latitude = l.getLatitude();// 精确 longitude = l.getLongitude(); chose(); if (flag == 1) { ltd_tmp = latitude1;// 城镇 lng_tmp = longitude1; } if (flag == 2) { ltd_tmp = latitude2;// 街道 lng_tmp = longitude2; } if (flag == 3) { ltd_tmp = latitude;// 精确 lng_tmp = longitude; } if (flag == 0) { ltd_tmp = latitude1;// 精确 lng_tmp = longitude1; } //创建 一个 “用于模拟的坐标提供者” // 创建一个仿真位置信息并添加到当前正在运行的provider中 locationManager.addTestProvider(mocLocationProvider, false, false, false, false, false, false, false, 0, 5); // 让创建好的仿真位置信息对于正在运行的provider可用。并且该值会替代原有真实provider中的数据 locationManager.setTestProviderEnabled(mocLocationProvider, true); Location = new Location(mocLocationProvider); // Location.setTime(currentLocation.getTime() ); // Location.setLatitude(Loc.getLatitude()); // Location.setLongitude(Loc.getLongitude()); float x = 5.0f, y = 0.0f, s = 10.0f; Location.setAccuracy(x);// 设置精度 Location.setSpeed(s); Location.setAltitude(y);// 设置 // Log.e("location", Location.toString()); // 获得已安装的应用程序信息 。可以通过getPackageManager()方法获得 pm = getPackageManager(); // 通过系统服务获取ActivityManager ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); // 获得当前正在运行的activity ComponentName cn = am.getRunningTasks(1).get(0).topActivity; name = cn.getPackageName(); // 在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知。 handler = new Handler(); // 实现多线程 runnable = new Runnable() { public void run() { DB.closeDB();// 关闭数据库 DB.openDB();// 打开数据库 opDB(); ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); ComponentName cn2 = am.getRunningTasks(1).get(0).topActivity; String cmp = cn2.getPackageName(); // Log.d(TAG, "Updater running"); if (!name.equals(cmp) && cmp.equals("com.example.hermit")) { name = cmp; } if (!name.equals(cmp) && !cmp.equals("com.android.launcher") && !cmp.equals("com.example.hermit")) { Log.d(TAG, cmp); try { ApplicationInfo info = pm.getApplicationInfo(cmp, 0); AN = (String) pm.getApplicationLabel(info);// AN表示获取的应用标签 Log.i("AN", AN); } catch (NameNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } chose(); if (flag == 1) { ltd_tmp = latitude1;// 城镇 lng_tmp = longitude1; } if (flag == 2) { ltd_tmp = latitude2;// 街道 lng_tmp = longitude2; } if (flag == 3) { ltd_tmp = latitude;// 精确 lng_tmp = longitude; } if (flag == 0) { ltd_tmp = latitude1;// 精确 lng_tmp = longitude1; } Location.setTime(System.currentTimeMillis()); Location.setLatitude(ltd_tmp); Location.setLongitude(lng_tmp); //locationManager.setTestProviderLocation(mocLocationProvider, Location); Log.e("l", l.toString()); Log.i("test1", "lat long" + latitude + longitude); Log.i("location", Location.toString()); Log.i("location", "flag=" + flag + " " + ltd_tmp + lng_tmp); try { locationManager.setTestProviderLocation( mocLocationProvider, Location); } catch (IllegalArgumentException e) { Log.d("test", "location error"); String mess = e.getLocalizedMessage(); Log.d("test", mess); } locationManager.requestLocationUpdates(currentProvider, 0, 0, locationListener); currentLocation = locationManager .getLastKnownLocation(currentProvider); if (currentLocation == null) { // Log.d("test","location error"); locationManager.requestLocationUpdates(currentProvider, 0, 0, locationListener); currentLocation = locationManager .getLastKnownLocation(currentProvider); } else { // Log.e("location", currentLocation.toString()); } // 获取当前运行的activity并放于cn2中 // ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); // ComponentName cn2 = am.getRunningTasks(1).get(0).topActivity; // String cmp = cn2.getPackageName(); // // // Log.d(TAG, "Updater running"); // if (!name.equals(cmp) && cmp.equals("com.example.hermit")) { // name = cmp; // } // if (!name.equals(cmp) && !cmp.equals("com.android.launcher") // && !cmp.equals("com.example.hermit")) { // Log.d(TAG, cmp); // try { // ApplicationInfo info = pm.getApplicationInfo(cmp, 0); // AN = (String) pm.getApplicationLabel(info);// AN表示获取的应用标签 // Log.i("AN", AN); // } catch (NameNotFoundException e1) { // // TODO Auto-generated catch block // e1.printStackTrace(); // } Log.d("falg", "flag=" + flag); // chose(); // if (flag == 1) { // ltd_tmp = latitude1;// 城镇 // lng_tmp = longitude1; // } // if (flag == 2) { // ltd_tmp = latitude2;// 街道 // lng_tmp = longitude2; // } // if (flag == 3) { // ltd_tmp = latitude;// 精确 // lng_tmp = longitude; // } // if (flag == 0) { // ltd_tmp = latitude1;// 精确 // lng_tmp = longitude1; // } // Location.setTime(System.currentTimeMillis()); // Location.setLatitude(ltd_tmp); // Location.setLongitude(lng_tmp); // locationManager.setTestProviderLocation(mocLocationProvider, Location); // 监听到用户打开了需要访问位置信息的应用 Log.d("falg", "flag=" + flag); if (flag == 1) { Intent i = new Intent(service.this, Dialog.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Bundle b = new Bundle(); b.putString("textview", "粒度策略:城镇级 "); i.putExtras(b); startActivity(i); flag = 0; } if (flag == 2) { Intent i = new Intent(service.this, Dialog.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Bundle b = new Bundle(); b.putString("textview", "粒度策略:街道级 "); i.putExtras(b); startActivity(i); flag = 0; } if (flag == 3) { Intent i = new Intent(service.this, Dialog.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Bundle b = new Bundle(); b.putString("textview", "粒度策略:精确级 "); i.putExtras(b); startActivity(i); flag = 0; } name = cmp; } handler.postDelayed(this, 3000); } }; handler.postDelayed(runnable, 3000); handleCommand(intent); // new ClientThread().run(); return START_STICKY; } private void chose() { double x1, y1, x2, y2; Random rdr = new Random();// rdr为一组随机数流 Random rdz = new Random(); int Z = rdz.nextInt(360);// 随机数的生成范围小于360 double R2 = 1 + rdr.nextDouble() * 10;// x2街道 double R1 = 9 + rdr.nextDouble() * 20;// x1城镇 if (Z <= 90 && Z >= 0) { x1 = R1 * Math.sin(Z * Math.PI / 180);// (Z*Math.PI/180)为弧度制 y1 = R1 * Math.cos(Z * Math.PI / 180); x2 = R2 * Math.sin(Z * Math.PI / 180); y2 = R2 * Math.cos(Z * Math.PI / 180); } else if (Z <= 180 && Z > 90) { x1 = R1 * Math.cos((Z - 90) * Math.PI / 180); y1 = R1 * Math.sin((Z - 90) * Math.PI / 180) * -1; x2 = R2 * Math.cos((Z - 90) * Math.PI / 180); y2 = R2 * Math.sin((Z - 90) * Math.PI / 180) * -1; } else if (Z <= 270 && Z > 180) { x1 = R1 * Math.sin((Z - 180) * Math.PI / 180) * -1; y1 = R1 * Math.cos((Z - 180) * Math.PI / 180) * -1; x2 = R2 * Math.sin((Z - 180) * Math.PI / 180) * -1; y2 = R2 * Math.cos((Z - 180) * Math.PI / 180) * -1; } else { x1 = R1 * Math.cos((Z - 270) * Math.PI / 180) * -1; y1 = R1 * Math.sin((Z - 270) * Math.PI / 180); x2 = R2 * Math.cos((Z - 270) * Math.PI / 180) * -1; y2 = R2 * Math.sin((Z - 270) * Math.PI / 180); } Log.i("r", "R1=" + R1 + "R2=" + R2); Log.i("x1= y1=", "x1=" + x1 + "y1=" + y1);// 城镇 Log.i("x2= y2=", "x2=" + x2 + "y2=" + y2); // latitude=location.getLatitude();//精确 // longitude=location.getLongitude(); latitude1 = latitude + x1 / 111;// 城镇 longitude1 = longitude + y1 / (111 * Math.cos(Z * Math.PI / 180)); latitude2 = latitude + x2 / 111;// 街道 longitude2 = longitude + y2 / (111 * Math.cos(Z * Math.PI / 180)); // location1.setLatitude(latitude1);//城镇 // location1.setLongitude(longitude1); // // location2.setLatitude(latitude2);//街道 // location2.setLongitude(longitude2); // Log.d("test1111","哈哈"); if (user1.contains(AN) == true) {// 如果应用在用户城镇级 flag = 1; // Log.d("test222","哈哈"); } else { if (user2.contains(AN) == true) flag = 2;// 如果应用在用户街道级 else { if (user3.contains(AN) == true) flag = 3;// 如果应用在用户精确级 else { if (default1.contains(AN) == true) { Log.d("默认城镇级", "哈哈"); flag = 1; } else { if (default2.contains(AN) == true) { Log.d("默认街道级", "哈哈"); flag = 2; } else { if (default3.contains(AN) == true) { Log.d("默认精确级", "哈哈"); flag = 3; } else { flag = 0; } } } } } } } private LocationListener locationListener = new LocationListener() { // 位置发生改变时调用 @Override public void onLocationChanged(Location location) { Log.d("Location", "onLocationChanged"); // handler.removeCallbacks(runnable); } // provider失效时调用 @Override public void onProviderDisabled(String provider) { Log.d("Location", "onProviderdisabled"); } // provider启用时调用 @Override public void onProviderEnabled(String provider) { Log.d("Location", "onProviderEnabled"); Location.setLatitude(ltd_tmp); Location.setLongitude(lng_tmp); } // 状态改变时调用 @Override public void onStatusChanged(String provider, int status, Bundle extras) { Log.d("Location", "onStatusChanged"); Location.setLatitude(ltd_tmp); Location.setLongitude(lng_tmp); } }; void handleCommand(Intent intent) { if (service.ACTION_FOREGROUND.equals(intent.getAction())) { // In this sample, we'll use the same text for the ticker and the // expanded notification CharSequence text = getText(R.string.foreground_service_started); // Set the icon, scrolling text and timestamp Notification notification = new Notification( R.drawable.ic_launcher, text, System.currentTimeMillis()); // The PendingIntent to launch our activity if the user selects this // notification // 用户点击service的通知时返回到主界面 PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TownactivityActivity.class), 0); // Set the info for the views that show in the notification panel. notification.setLatestEventInfo(this, getText(R.string.local_service_label), text, contentIntent); startForeground(1000, notification); // startForegroundCompat(R.string.foreground_service_started, // notification); } else if (service.ACTION_BACKGROUND.equals(intent.getAction())) { stopForegroundCompat(R.string.foreground_service_started); } } public void onDestroy() { Log.i(TAG, "this is ondestroy"); handler.removeCallbacks(runnable); Toast.makeText(this, "service stopped", Toast.LENGTH_SHORT).show(); } public boolean onUnbind(Intent intent) { Log.i(TAG, "this is onUnbind"); return super.onUnbind(intent); } private void opDB() { // 清空所有元素 user1.clear(); user2.clear(); user3.clear(); default1.clear(); default2.clear(); default3.clear(); // Log.d("1","test"); Cursor tmp1 = DB.select("USER1"); Cursor tmp2 = DB.select("USER2"); Cursor tmp3 = DB.select("USER3"); // Log.d("1","test"); if (tmp1.moveToFirst() == false) ; else { String T1 = tmp1.getString(1); if (user1.contains(T1) == true) ; else user1.add(T1); while (tmp1.moveToNext()) { T1 = tmp1.getString(1); if (user1.contains(T1) == true) ; else user1.add(T1); // Log.d("test",T1); } } if (tmp2.moveToFirst() == false) ; else { String T2 = tmp2.getString(1); if (user2.contains(T2) == true) ; else user2.add(T2); while (tmp2.moveToNext()) { T2 = tmp2.getString(1); if (user2.contains(T2) == true) ; else user2.add(T2); // Log.d("test",T2); } } if (tmp3.moveToFirst() == false) ; else { String T3 = tmp3.getString(1); if (user3.contains(T3) == true) ; else user3.add(T3); while (tmp3.moveToNext()) { T3 = tmp3.getString(1); if (user3.contains(T3) == true) ; else user3.add(T3); // Log.d("test",T3); } } } }

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

阿里面试官让我用Zk(Zookeeper)实现分布式锁

他可能没想到,我当场手写出来了

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

立即提问
相关内容推荐