Androidのグラフィックの移動

2562 ワード

目的
Androidでは1つの図形を任意の位置に移動できるように実現しています
実装する基本機能
指がスクリーンのどこに点をつけて、図形の中心はどこについています
具体的な実装
1.xmlファイルに書き換えて、TextViewを削除して、Viewを書いて、図形のidを設定して、幅と高さ、そして色
  
  



  

2.MainActivityでonCreateメソッドを書き換える
  View redView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //  id    
    redView=findViewById(R.id.view);
}

3.onTouchEventメソッドの書き換え
@Override
public boolean onTouchEvent(MotionEvent event) {
    //         
    int action=event.getAction();
    //       
    Point p=new Point();
    //  getSize         
    getWindowManager().getDefaultDisplay().getSize(p);
    RelativeLayout rl=findViewById(R.id.root);
    float padding = p.y - rl.getHeight();
    if (action==MotionEvent.ACTION_DOWN){
        //  
        //        
        float x=event.getX();
        float y=event.getY()-padding;
        //       
        redView.setX(x-(int)(redView.getWidth()*0.5));
        redView.setY(y-(int)(redView.getHeight()*0.5));
    }else if (action==MotionEvent.ACTION_MOVE){
        //  
        //  
        //        
        float x=event.getX();
        float y=event.getY()-padding;
        //       
        redView.setX(x-(int)(redView.getWidth()*0.5));
        redView.setY(y-(int)(redView.getHeight()*0.5));
    }else if (action==MotionEvent.ACTION_UP){
        //    
    }else{

    }
    return true;
}

また、onTouchメソッドを書き換えることで色の変化を実現することもできます
@Override
public boolean onTouchEvent(MotionEvent event) {
    //       
    //redView.setBackgroundColor(Color.BLACK);
    RelativeLayout rl=findViewById(R.id.root);
    //  tag            
    View iv=rl.findViewWithTag("1");
    iv.setBackgroundColor(Color.BLACK);
    return true;
}

小結
小さなDemoですが、そこから学ぶことがたくさんあります.例えばgetSizeで画面の大きさを取得し、実行後に問題を発見しました.ステータスバーの高さを減らしていないので位置が正しくないことがわかりました.押すとACTION_DOWN、スライドはACTION_MOVEなど、小さな知識点は往々にして大きな工事の一部に欠かせない部品である.