0

これが明確でない場合はご容赦ください。これは私の最初の投稿です。

キャンバスに数本の線を描き、キャンバスを移動して線を画面の中央に配置しようとしています。問題は、翻訳から除外したいアクションバー (actionbarsherlock を使用) があることです。つまり、ビューの上部をアクションバーの下に置きたいのです。

そのままでは画面全体の高さでデータが縦中央揃えになっているのですが、アクションバー下のキャンバスの見える部分だけ縦中央揃えにしたいです。

これを達成するための最良の方法のアイデアはありますか?

@Override
protected void onDraw(Canvas canvas) {
    Paint paint = mPaint;

    paint.setAntiAlias(true);
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.FILL);


    int centrew = canvas.getWidth()/2;
    int centreh = canvas.getHeight()/2;

    canvas.translate(centrew, centreh);
    canvas.drawLine(0, -5, 0, 5, mPaint);
    canvas.drawLine(5, 0, -5, 0, mPaint);

}
4

2 に答える 2

0

バーの正確なサイズがわかっている場合は、それをキャンバス全体の高さに適用して、シフトを増やすことができます。

int maxV = canvas.getHeight() + barHeight;
int centreh = maxV/2;

バーが上にあり、キャンバスの一部を覆っていると想定しているため、(左上隅からの) シフトを大きくする必要があります。バーが下にある場合は、シフトを減らす必要があります。

int maxV = canvas.getHeight() - barHeight;
int centreh = maxV/2;

編集: 異なるデバイスでバーのピクセル単位のサイズが異なる場合は、それを機能させるために少しハックする必要があります。バーについて安全に仮定を立て、それが成り立たない場合に備えて修正することができます。バー用に予約された特定の比率を想定し、それに応じて絶対ピクセル数を調整できます (ワンライナーは説明用です)。

int maxV = Math.round(canvas.getHeight()*(1f + barRatio)); 

画面の縦横比に応じて比率をさらに調整して、さらにうまく機能させることができます。

残念ながら、現在のレイアウトと抽出サイズを読み取ることができないため、本当にきれいな解決策はありません。

于 2012-06-12T13:38:40.490 に答える
0

私が使用した解決策は、ここで説明したとおりです。

http://developer.android.com/resources/samples/HoneycombGallery/src/com/example/android/hcgallery/TitlesFragment.html

基本的に、私のアクティビティには次のレイアウト リスナーが定義されています。

ViewTreeObserver.OnGlobalLayoutListener layoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        mmv.setAbShift(MunroBag.this.actionBar.getHeight());
    }
};  

次に、ビュー クラスには次のメソッドが定義されています。

    public void setAbShift(int shift)
    {
        abShift = shift;
        this.invalidate();
    }

そのため、onDraw が呼び出され、actionBar の高さに応じてシフトがビューに適用されます。

于 2012-06-15T12:25:12.053 に答える