1

我是 android 新手,我正在尝试使用触摸屏将我的绘图定位在正确的坐标上。当我触摸屏幕时,我获得坐标(x,y),但是当我按下按钮绘制圆圈时,它会在我触摸的点下方的位置绘制圆圈。我使用 relativeLyout 作为我的布局,我给了它一个 ID 作为“布局”,我用它在我的 java 类中引用它。我认为这是因为我正在使用 addView 在相同的布局上绘制。我尽我所能纠正它但不能。(点击按钮后画出圆圈,但不在我想要的位置,它低于我触摸的点)有人可以帮助我吗?这是我的代码。

public class MyView extends View{

        float x ;
    float y ;
    int radius = 20;

    public MyView(Context context, float x, float y){

        super(context);
        this.x = x;
        this.y = y;


    }   //end constructor


    public void onDraw(Canvas canvas){
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setAntiAlias(true);

        canvas.drawCircle(x, y, radius, paint);

    }   //end onDraw


}   //end class MyView

这是我的主要课程:

public class ButtonClickActivity extends Activity implements OnClickListener{

    RelativeLayout laying;
    Button button;
    MyView myView;

    private static float x=100;
    private static float y=100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_click);

        laying = (RelativeLayout) findViewById(R.id.layout);
        button = (Button) findViewById(R.id.circle);


        //set listeners
        button.setOnClickListener(this);



    }   //end onCreate

    public void onClick(View view){
        switch(view.getId()){
        case R.id.circle:

        myView = new MyView(this, x, y);
        laying.addView(myView);}

这是触摸事件

public boolean onTouchEvent(MotionEvent event){

        int action = event.getAction();

        //get the type of action
        switch(action){

        case MotionEvent.ACTION_DOWN:   //you have touch the screen
            x =  event.getX();
            y =  event.getY();
                       break
                 }
}

这是布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:id="@+id/layout" >

    <Button 
        android:id="@+id/circle" 
        android:layout_alignParentBottom="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight = "1"
        android:text="Circle"/>
</RelativeLayout>
4

1 回答 1

0

你错过的是视图的大小。你的自定义视图不知道圆圈需要多少空间,默认是换行内容,那么最小尺寸是多少呢?没错:0。

这就是为什么你什么都看不到的原因。要么从视图外部设置大小,要么在视图内以某种方式自己测量它并告诉父视图视图需要什么大小(然后检查父视图给你的大小并使用它)。

阅读此处了解有关自定义视图的更多信息。

顺便说一句,不建议在 onDraw 中创建绘画,至少不要以每次调用时都重新创建它的方式。

于 2013-01-26T21:16:03.233 回答