簡體   English   中英

嵌套曲面視圖>線性布局>水平滾動視圖

[英]Nesting surfaceview>Linearlayout>Horizontal scrollview

我一直在研究有關android中2D應用程序的一些教程。

目前,我正在使用繪制到Surfaceview上的畫布,但是我想使屏幕水平滾動以制作基本的基於十六進制的策略游戲。 到目前為止,我還沒有一點喜悅:

(我一直在使用以下教程: http : //www.droidnova.com/playing-with-graphics-in-android-part-vii,220.html

我應該擴展Linearlayout嗎?

XML:

<?xml version="1.0" encoding="utf-8"?>

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/linearLayout"
>

</LinearLayout>


</HorizontalScrollView>

相關代碼:

package com.blackslot.BlackMark;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.blackslot.BlackMark.gamethread;
import android.widget.LinearLayout;




import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.media.AudioManager;
import android.media.SoundPool;
import android.util.Log;

import android.view.SurfaceHolder;
import android.view.SurfaceView;


public class Panel extends SurfaceView implements SurfaceHolder.Callback  {

/**
 * Thread which contains the game loop.
 */

private gamethread _thread;

 /**
 * List of graphics to handle.
 */
private ArrayList<Graphic> _graphics = new ArrayList<Graphic>();


/**
 * Sound pool
 */
private SoundPool _soundPool;


/**
 * Cache variable for all used images.
 */
private Map<Integer, Bitmap> _bitmapCache = new HashMap<Integer, Bitmap>();

/**
 * Constructor called on instantiation.
 * @param context Context of calling activity.
 */
public Panel(Context context) {
    super(context);
    fillBitmapCache();
    _soundPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 100);
    getHolder().addCallback(this);
    _thread = new gamethread(this);
    setFocusable(true);
}

private void fillBitmapCache() {

    _bitmapCache.put(R.drawable.tacticalbuttondefault, BitmapFactory.decodeResource(getResources(), R.drawable.tacticalbuttondefault));
    _bitmapCache.put(R.drawable.targettingbuttondefault, BitmapFactory.decodeResource(getResources(), R.drawable.targettingbuttondefault));
   // _bitmapCache.put(R.drawable.ship1, BitmapFactory.decodeResource(getResources(), R.drawable.ship1));
   //_bitmapCache.put(R.drawable.ship2, BitmapFactory.decodeResource(getResources(), R.drawable.ship2));
    _bitmapCache.put(R.drawable.abstrakt, BitmapFactory.decodeResource(getResources(), R.drawable.abstrakt));
}

/**
 * Draw on the SurfaceView.
 * Order:
 * <ul>
 *  <li>Background image</li>
 *  <li>Items on the panel</li>
 * </ul>
 */
@Override
public void onDraw(Canvas canvas) {
    // draw the background
    canvas.drawBitmap(_bitmapCache.get(R.drawable.abstrakt), 0, 0, null);
    Bitmap bitmap;
    Graphic.Coordinates coords;
    // draw the UI
    canvas.drawBitmap(_bitmapCache.get(R.drawable.tacticalbuttondefault), -2, 0, null);
    canvas.drawBitmap(_bitmapCache.get(R.drawable.targettingbuttondefault), -2, 120, null);




    // draw the normal items
    for (Graphic graphic : _graphics) {
        bitmap = graphic.getBitmap();
        coords = graphic.getCoordinates();
        canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
    }
}
// @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }

/**
 * Called on creation of the SurfaceView.
 * Which could be on first start or relaunch.
 */
// @Override
public void surfaceCreated(SurfaceHolder holder) {
    if (!_thread.isAlive()) {
        _thread = new gamethread(this);
    }
    _thread.setRunning(true);
    _thread.start();
}

/**
 * Called if the SurfaceView should be destroyed.
 * We try to finish the game loop thread here.
 */
// @Override
public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    _thread.setRunning(false);
    while (retry) {
        try {
            _thread.join();
            retry = false;
        } catch (InterruptedException e) {
            // we will try it again and again...
        }
    }
    Log.i("thread", "Thread terminated...");
}
}

謝謝。

決定使用位圖的X和Y像素偏移來解決該問題(允許在兩個方向上滾動),並一起放棄horizo​​ntalscrollview。

雖然不是我一直在尋找的解決方案,但對於大量的控制來說,它並不需要太多額外的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM