Jestem wykonawczych próbnika czasu, który wygląda tak:Android Widok niestandardowy przenieść z powrotem do pierwotnego położenia podczas odświeżania
To żółty blok jest MyCustomView
. Podczas przenoszenia MyCustomView
powinienem obliczyć nową datę i ustawić tvDate
.
częściowy plik układ:
<LinearLayout
android:orientation="vertical">
<TextView android:id="@+id/tv_date">
<RelativeLayout
android:id="@+id/rl">
<MyCustomView
android:layout_centerInParent="true"/>
<OtherViews/>
</RelativeLayout>
</LinearLayout>
Kod:
class MyCustomView extends View{
// move listener
public interface IMoveCallback{
void update(int index);
}
private IMoveCallback listener = null;
// set listener
public void setMoveCallback(IMoveCallback callback){
this.listener = callback;
}
@Override
protected void onDraw(Canvas c){
super.onDraw(c);
// draw yellow block and four arrows here.
}
@Override
public boolean onTouch(View v, MotionEvent event) {
processDrag(v, event);
invalidate();
return false;
}
private void processDrag(View v, MotionEvent event){
// calculate new position(left, top, right, bottom)
v.layout(newLeft, newTop, newRight, newBottom);
if(listener != null){
// calculate index by new position
listener.update(index);
}
}
}
class MainActivity extends Activity implements MyCustomView.IMoveCallback{
MyCustomView view; // view.setMoveCallback(MainActivity.this)
@Override
public void update(int index){
tvDate.setText(String.valueOf(System.currentTimeMillis()))//update tvDate
}
}
Jeśli tvDate.setText()
jest usuwany, MyCustomView
następująco palec, na przykład:
Jeśli zaktualizować tvDate
MyCustomView
wraca do centrum rl
:
I nie sądzę, że problem zadaniowego cyklem życia. Ktoś wspomniał o ((MarginLayoutParams)rl.getLayoutParams()).topMargin
, ale nie wyjaśnił dlaczego.
Ktoś może mi pomóc?
powinny być bardziej szczegółowe. Co masz na myśli przez "swoją oryginalną pozycję"? –
Pokaż również pełny kod działania. Może to być kwestia cyklu życia aktywności –
@FarhadFaghihi Mam edytować moje pytanie. 'MainActivity' zawiera' onCreate' i wywołanie zwrotne. Nie uważam tego za problem związany z cyklem życia aktywności. –