微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Android系统开发全攻略(二)

Android系统开发全攻略(二)

时间:06-08 来源:互联网 点击:

ANDLE_WIDTH;

mRightMargin=Math.abs(lp.rightMargin);

this.setLayoutParams(lp);

this.setOrientation(LinearLayout.HORIZONTAL);

//设置Handler的属性

btnHandler=new Button(context);

btnHandler.setLayoutParams(new LayoutParams(HANDLE_WIDTH,height));

//btnHandler.setOnClickListener(handlerClickEvent);

btnHandler.setOnTouchListener(handlerTouchEvent);

this.addView(btnHandler);

//设置Container的属性

panelContainer=new LinearLayout(context);

panelContainer.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,

LayoutParams.FILL_PARENT));

this.addView(panelContainer);

}

private View.OnTouchListener handlerTouchEvent=new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

if(event.getAction()==MotionEvent.ACTION_UP //onScroll时的ACTION_UP

mIsScrolling==true)

{

LayoutParams lp=(LayoutParams) Panel.this.getLayoutParams();

if (lp.rightMargin 》= (-mRightMargin/2)) {//往左超过一半

new AsynMove().execute(new Integer[] { MOVE_WIDTH });// 正数展开

}

else if (lp.rightMargin 《 (-mRightMargin/2)) {//往右拖拉

new AsynMove().execute(new Integer[] { -MOVE_WIDTH });// 负数收缩

}

}

return mGestureDetector.onTouchEvent(event);

}

};

/**

* 定义收缩时的回调函数

* @param event

*/

public void setPanelClosedEvent(PanelClosedEvent event)

{

this.panelClosedEvent=event;

}

/**

* 定义展开时的回调函数

* @param event

*/

public void setPanelOpenedEvent(PanelOpenedEvent event)

{

this.panelOpenedEvent=event;

}

/**

  * 把View放在Panel的Container

* @param v

*/

public void fillPanelContainer(View v)

{

panelContainer.addView(v);

}

/**

* 异步移动Panel

* @author hellogv

*/

class AsynMove extends AsyncTask《Integer, Integer, Void》 {

@Override

protected Void doInBackground(Integer.。。 params) {

int times;

if (mRightMargin % Math.abs(params[0]) == 0)// 整除

times = mRightMargin / Math.abs(params[0]);

else

// 有余数

times = mRightMargin / Math.abs(params[0]) + 1;

for (int i = 0; i 《 times; i++) {

publishProgress(params);

try {

Thread.sleep(Math.abs(params[0]));

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return null;

}

@Override

protected void onProgressUpdate(Integer.。。 params) {

LayoutParams lp = (LayoutParams) Panel.this.getLayoutParams();

if (params[0] 《 0)

lp.rightMargin = Math.max(lp.rightMargin + params[0],

(-mRightMargin));

else

lp.rightMargin = Math.min(lp.rightMargin + params[0], 0);

if(lp.rightMargin==0 panelOpenedEvent!=null){//展开之后

panelOpenedEvent.onPanelOpened(Panel.this);//调用OPEN回调函数

}

else if(lp.rightMargin==-(mRightMargin) panelClosedEvent!=null){//收缩之后

panelClosedEvent.onPanelClosed(Panel.this);//调用CLOSE回调函数

}

Panel.this.setLayoutParams(lp);

}

}

@Override

public boolean onDown(MotionEvent e) {

mScrollX=0;

mIsScrolling=false;

return false;

}

@Override

public boolean onSingleTapUp(MotionEvent e) {

LayoutParams lp = (LayoutParams) Panel.this.getLayoutParams();

if (lp.rightMargin 《 0)// CLOSE的状态

new AsynMove().execute(new Integer[] { MOVE_WIDTH });// 正数展开

else if (lp.rightMargin 》= 0)// OPEN的状态

new AsynMove().execute(new Integer[] { -MOVE_WIDTH });// 负数收缩

return false;

}

@Override

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,

float distanceY) {

mIsScrolling=true;

mScrollX+=distanceX;

LayoutParams lp=(LayoutParams) Panel.this.getLayoutParams();

if (lp.rightMargin 《 -1 mScrollX 》 0) {//往左拖拉

lp.rightMargin = Math.min((lp.rightMargin + (int) mScrollX),0);

Panel.this.setLayoutParams(lp);

Log.e(“onScroll”,lp.rightMargin+“”);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top