Custom View over XML Layout



I made a custom View DrawView.java, where I draw a simple line. I want this custom view overlay my activity_main.xml for my MainActivity.java. For testing purposes, there is a simple Button in the XML file. The drawn line should draw itself over the Button. At the moment, the drawn line lies under the button, respectively under the XML View.


How can i achieve this, and in a perfect world still keep the button clickable? ;)


DrawView.java



public class DrawView extends LinearLayout {
Paint paint = new Paint();

private int endX;
private int endY;
private int startX;
private int startY;

public DrawView(Context context) {
super(context);

LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mInflater.inflate(R.layout.activity_main, this, true);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(10);

}

@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(startX, startY, endX, endY, paint);

}

public void setCoordinates(int startX, int startY, int endX, int endY) {
this.endX = endX;
this.endY = endY;
this.startX = startX;
this.startY = startY;
}}


MainActivity.java



public class MainActivity extends ActionBarActivity implements OnTouchListener{

DrawView drawView;

private int number;
private Handler handler;
private boolean Running = true;
private int endX = 500;
private int endY = 500;
private int startX = 50;
private int startY = 50;
private int frames = 25;

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

drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);

handler = new Handler();
Runnable runnable = new Runnable() {

@Override
public void run() {
while (Running) {
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
int coordX = ((((endX - startX) / frames) * number))
+ startX;
int coordY = ((((endY - startY) / frames) * number))
+ startY;
number += 1;
drawView.setCoordinates(startX, startY, coordX,
coordY);
setContentView(drawView);
if ((coordX - endX) == 0 && coordY - endY ==0) {
Running = false;
}
}
});
}
// TODO Auto-generated method stub

}

};
new Thread(runnable).start();
}

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}}


activity_main.xml



<RelativeLayout xmlns:android="http://ift.tt/nIICcg"
xmlns:tools="http://ift.tt/LrGmb4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="de.trialar.linedrawer.MainActivity"
>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="180dp"
android:text="Button" />

No comments:

Post a Comment