2

私は自分のビューを作成しました。半円です。画面の下部に揃えてほしい。drawArcを使って描いたので、下に揃えません。中心のy座標が画面の下部座標と一致する円を設定するという代替案を試しました。いくつかの追加機能を実装したいので、使用したくありません。これがカスタムビューのコードです。

package legacy_systems.customview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class CircleView extends View{

    private Paint markerPaint;
    private Paint textPaint;
    private Paint circlePaint;
    private int textHeight;

    public CircleView(Context context)
    {
        super(context);
        initCircleView();
    }

    public CircleView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        initCircleView();
    }

    public CircleView(Context context, AttributeSet attrs, int defaultStyle)
    {
        super(context, attrs, defaultStyle);
        initCircleView();
    }

    protected void initCircleView()
    {
        setFocusable(true);

        circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        circlePaint.setColor(getResources().getColor(android.R.color.black));
        circlePaint.setStrokeWidth(3);
        circlePaint.setStyle(Paint.Style.STROKE);

        markerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        markerPaint.setColor(getResources().getColor(android.R.color.darker_gray));
    }

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int measuredWidth = measure(widthMeasureSpec);
        int measuredHeight = measure(heightMeasureSpec);

        int d = Math.min(measuredWidth, measuredHeight);

        setMeasuredDimension(d,d);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        int px, py;

        px = getMeasuredWidth()/2;
        py = getMeasuredHeight()/2;

        int radius = Math.min(px, py);

        RectF oval = new RectF();
        oval.set(px-radius, py-radius, px+radius, py+radius);

        canvas.drawArc(oval,180,180,false, circlePaint);
        //canvas.drawCircle(px, py, radius, circlePaint);
        canvas.save();



    }

    private int measure(int measureSpec)
    {
        int result = 0;

        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);

        if(specMode == MeasureSpec.UNSPECIFIED)
        {
            result = 200;
        }
        else
        {
            result = specSize;
        }

        return result;
    }

}

私が得ているもののスクリーンショット 半円を画面の下部に揃えたい。どのように私がそれを行うことができるかについてのアイデアはありますか?

4

3 に答える 3

3

まず第一に、あなたの答えに感謝します。あなたの答えは部分的に正しいです。はい、

android:layout_alignParentBottom="true"

半分のトリックを行います。描画する円があるとします。カスタムビューでは、(0,0)は、画面ではなく、ビューの左端の最も高い座標を表します。そして、私がやりたかったのと同じように、画面の下部に半円を配置したいとします。座標の推測が問題になることがわかります。これが私が実際にそれを解決した方法です。

px = getMeasuredWidth()/2;
py = getMeasuredHeight();

canvas.drawCircle(px, py, radius, paint);

ここで、pxはビューの全幅の中心、ビューの幅の中点であり、ビューにpy割り当てられた最後の画面のy軸座標になります。

それが他の誰かにも役立つことを願っています。

于 2013-03-29T20:27:23.403 に答える
1

あなたは使用を試みることができます:

android:gravity="bottom" 

また

android:layout_gravity="bottom"

財産。

于 2013-03-23T23:01:12.537 に答える
0

配置/追加する画面が。であることを確認してくださいRelativeLayout

レイアウトでこれを行う

<legacy_systems.customview.CircleView
android:id="@+id/myview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"/>

onCreate()メソッドで

CircleView view = (CircleView) findViewById(R.id.myview);
于 2013-03-23T22:54:22.613 に答える