0

私のアプリケーションでは、イメージビューでイメージを設定しています。その画像ビューにマーカーを配置するだけです。カスタム イメージ ビュー クラスで onDraw 関数を使用して実行しています。問題は、たとえば、x 位置と y 位置をそれぞれ 40 としている場合です。モバイルで画像の上に表示されているマーカーの位置は、同じアプリケーションを実行している場合とは異なります。タブレット。

座標を指定すると、モバイルとタブレットの画像上のマーカーの位置が同じように見えるようなソリューションが必要です。

私の主な活動のコードは次のとおりです。

public class PointOnImageActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_point_on_image);
        CustomImag ev= new CustomImag(this);
        ev.setBackgroundResource(R.drawable.stad);// set background
        setContentView(ev);
    }
}

これが私のカスタムimageviewクラスのコードです:

public class CustomImag extends ImageView
{
        public CustomImag(Context context) 
        {
        super(context);
        }

        @Override
        public void onDraw(Canvas canvas) 
        {
            super.onDraw(canvas);
            Paint mPaint = new Paint();
            mPaint.setColor(Color.RED);
            canvas.drawCircle(40,40,10,mPaint);
         }
 }
4

2 に答える 2

1

これは、40 がピクセル値であるためです。実際には、代わりに 40dp が必要です。したがって、次のように 40dp を px 値に動的に変換できます。

int pxValue1 = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40,  context.getResources()
                    .getDisplayMetrics());

int pxValue2 = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,  context.getResources()
                    .getDisplayMetrics());


 canvas.drawCircle(pxValue,pxValue,pxValue2,mPaint);
于 2013-07-25T06:59:27.197 に答える
1

View画面の寸法に合わせてカスタムを配置する必要があります。このように、アプリを表示する画面のサイズに関係なく、位置は相対的になります。

あなたのonDraw(Canvas)方法では、画面の寸法を取得し、それらを使用して円を描くことができます。次の例 (ほとんどがあなたのコードです) では、赤い丸をscreen_width / 4とに配置しscreen_height / 4ます。

public class MyCustomImageViewActivity extends Activity{    

    CustomImag ev;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ev = new CustomImag(this);
        ev.setBackgroundResource(R.drawable.stad);// set background
        setContentView(ev);
    }

    public class CustomImag extends ImageView {
        Paint mPaint;

        public CustomImag(Context context) {
        super(context);
        mPaint = new Paint();
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Point point = new Point();
        getWindowManager().getDefaultDisplay().getSize(point);

        mPaint.setColor(Color.RED);
        canvas.drawCircle(point.x / 4, point.y / 4, 10, mPaint);
        }
    }   
}
于 2013-07-25T07:28:12.120 に答える