0

私はアンドロイドの2Dアプリケーションに関するチュートリアルをいくつか進めてきました。ネスティングサーフェイスビュー>線形レイアウト>水平スクロールビュー

現在、私は表面ビューに描かれたキャンバスを使って作業していますが、私は画面を水平スクロール可能にして基本的な16進数ベースの戦略ゲームにしたいと考えています。これまでのところ、私は少し喜びを持っていた:

(Iから取り組んできたチュートリアル: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..."); 
} 
} 

感謝。

答えて

0

X &ビットマップのYピクセルオフセット(両方向のスクロールを許可)を使用して問題を解決し、horizo​​ntalcrollviewを一括して放棄することを決定しました。

私が探していた解決策ではありませんが、大いに多くの制御のための余分な作業ではありません。

関連する問題