Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何以编程方式设置相对布局的z索引_Android_Layout_View_Z Index - Fatal编程技术网

Android 如何以编程方式设置相对布局的z索引

Android 如何以编程方式设置相对布局的z索引,android,layout,view,z-index,Android,Layout,View,Z Index,我正在测试android应用程序的一些代码。我有两个视图,一个是ImageView,另一个是FastRenderView,都是用Java实现的,而不是用Xml实现的。我要做的是使FastrenderView全屏显示,并将imageView放在屏幕较小部分的顶部。问题是只有fastrenderview出现在屏幕上。代码如下: ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s

我正在测试android应用程序的一些代码。我有两个视图,一个是ImageView,另一个是FastRenderView,都是用Java实现的,而不是用Xml实现的。我要做的是使FastrenderView全屏显示,并将imageView放在屏幕较小部分的顶部。问题是只有fastrenderview出现在屏幕上。代码如下:

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    assMan = getAssets();

    rocketImage = new ImageView(this);
    rocketImage.setBackgroundResource(R.drawable.rocket);
    anime = (AnimationDrawable) rocketImage.getBackground();

    layout = new RelativeLayout(this);

    android.widget.RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
    renderView = new FastRenderView(this);

    android.widget.RelativeLayout.LayoutParams testbox = new RelativeLayout.LayoutParams(screenWidth/4,screenHeight/4);

    layout.addView(renderView, 0, params);
    layout.addView(rocketImage, 1,  testbox);
    setContentView(layout);

    renderView.resume();
    gDetector = new GestureDetector(getBaseContext(), this);
    try{
        is=assMan.open("pot.png");
        bm = BitmapFactory.decodeStream(is);
        bm = bm.copy(Config.ARGB_8888 ,true);
        is.close();

        is = assMan.open("boo1.png");
        bm1 = BitmapFactory.decodeStream(is);
        bm1 = bm1.copy(Config.ARGB_8888 ,true);
        is.close();

        is = assMan.open("boo3.png");
        bm2 = BitmapFactory.decodeStream(is);
        bm2 = bm2.copy(Config.ARGB_8888 ,true);
        is.close();
        } catch (Exception e) {
                e.printStackTrace();
            }


    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    screenHeight = metrics.heightPixels;
    screenWidth = metrics.widthPixels;
    scaleFactorX = screenWidth/480f;
    scaleFactorY = screenHeight/800f;


    dst.set((int)(0*scaleFactorX),(int)(0*scaleFactorY),(int)(479*scaleFactorX),(int)(799*scaleFactorY));
    src.set(0, 0, 1024, 1024);

    dst1.set((int)(0*scaleFactorX),(int)(0*scaleFactorY),(int)(100*scaleFactorX),(int)(100*scaleFactorY));
    src1.set(0, 0, 1024, 1024);

    dst2.set((int)(200*scaleFactorX),(int)(200*scaleFactorY),(int)(400*scaleFactorX),(int)(400*scaleFactorY));
    src2.set(0, 0, 1024, 1024);

}

class FastRenderView extends SurfaceView implements Runnable{
    Thread renderThread = null;
    SurfaceHolder holder;
    volatile boolean running = false;

    @Override
    public boolean onTouchEvent(MotionEvent me){
        return gDetector.onTouchEvent(me);
    }

    public FastRenderView(Context context) {
        super(context);
        setKeepScreenOn(true);
        holder=getHolder();
    }

    public void resume() {
        running = true;
        renderThread = new Thread(this);
        renderThread.start();
        }

    public void pause() {        
        running = false;                        
        while(true) {
            try {
                renderThread.join();
                break;
            } catch (InterruptedException e) {
                // retry
            }
        }
        renderThread = null;        
    }

    public void run() {
        while(running) {
        if(!holder.getSurface().isValid())
        continue;
        Canvas canvas = holder.lockCanvas();
        drawSurfice(canvas);
        holder.unlockCanvasAndPost(canvas);
        }
    }


    private void drawSurfice(Canvas canvas){
            canvas.drawColor (Color.BLACK);
            canvas.drawBitmap(bm, src, dst, null);
            canvas.drawBitmap(bm1, src1, dst1, null);
            canvas.drawBitmap(bm2, src2, dst2, null);
             }

} 

那么,有没有一种方法可以在不使用xml的情况下以编程方式设置视图的z索引?

好的,找到了。问题出在这一行:

    android.widget.RelativeLayout.LayoutParams testbox = new RelativeLayout.LayoutParams(screenWidth/4,screenHeight/4);
我通过插入硬编码坐标对其进行了更改:

android.widget.RelativeLayout.LayoutParams testbox = new RelativeLayout.LayoutParams(100, 100);