下面列出了android.view.View#postInvalidate ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
protected void translateView(View view, boolean dir, float offset) {
Log.d("wxy-motion", String.format("translateView setTag %s", offset));
setViewOffset(view, offset);
view.setPivotX(0.f);
if (dir) {
Log.d("wxy-motion", String.format("translateView setPivotY %s", 0));
view.setPivotY(0.f);
} else {
view.setPivotY(view.getMeasuredHeight());
Log.d("wxy-motion", String.format("translateView setPivotY %s", view.getMeasuredHeight()));
}
view.setScaleY(Math.min(getMaxScaleFactor(), (1.f + Math.abs(offset) / view.getWidth())));
view.postInvalidate();
// view.setTranslationY(offset);
}
@Override
protected void translateView(View view, boolean dir, float offset) {
Log.d("wxy-motion", String.format("translateView setTag %s", offset));
setViewOffset(view, offset);
view.setPivotY(0.f);
if (dir) {
Log.d("wxy-motion", String.format("setPivotX setTag %s", 0));
view.setPivotX(0.f);
} else {
Log.d("wxy-motion", String.format("setPivotX setTag %s", view.getMeasuredWidth()));
view.setPivotX(view.getMeasuredWidth());
}
view.setScaleX(Math.min(getMaxScaleFactor(), (1.f + Math.abs(offset) / view.getWidth())));
view.postInvalidate();
// view.setTranslationX(offset);
}
public void invalidate() {
View view = mViewRef.get();
if (view != null) {
view.postInvalidate();
}
}
/**
* @see android.view.View#postInvalidateOnAnimation()
*/
public static void postInvalidateOnAnimation(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.postInvalidateOnAnimation();
} else {
view.postInvalidate();
}
}
/**
* @see android.view.View#postInvalidateOnAnimation()
*/
public static void postInvalidateOnAnimation(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.postInvalidateOnAnimation();
} else {
view.postInvalidate();
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v.getId()==R.id.cursor_left || v.getId()==R.id.cursor_right ){
int ea = event.getAction();
//final int screenWidth = dm.widthPixels;
//final int screenHeight = dm.heightPixels;
switch(ea){
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();// 获取触摸事件触摸位置的原始X坐标
lastY = (int) event.getRawY();
Log.e("获取触摸事件触摸位置的原始X坐标",lastX +":"+lastY);
readLongPress.setVisibility(View.INVISIBLE);
break;
case MotionEvent.ACTION_MOVE:
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;
int l = v.getLeft() + dx;
int b = v.getBottom() + dy;
int r = v.getRight() + dx;
int t = v.getTop() + dy;
v.layout(l, t, r, b);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
v.postInvalidate();
//移动过程中要画线
pageView.setmCurrentMode(PageView.Mode.SelectMoveForward);
int hh = cursorLeft.getHeight();
int ww = cursorLeft.getWidth();
if(pageView.getFirstSelectTxtChar()!=null) {
//cursorLeft.setX(pageView.getFirstSelectTxtChar().TopLeftPosition.x - ww / 2);
//cursorLeft.setY(pageView.getFirstSelectTxtChar().TopLeftPosition.y - hh);
//cursorRight.setX(pageView.getFirstSelectTxtChar().BottomRightPosition.x - ww / 2);
//cursorRight.setY(pageView.getFirstSelectTxtChar().BottomRightPosition.y);
}
if(v.getId()==R.id.cursor_left) {
pageView.setFirstSelectTxtChar(pageView.getCurrentTxtChar(lastX + ww / 2, lastY + hh));
}else{
pageView.setLastSelectTxtChar(pageView.getCurrentTxtChar(lastX - ww / 2, lastY - hh));
}
//Log.e("sss",lastX +":"+lastY);
//Log.e("sss",pageView.getmCurrentMode().toString());
pageView.invalidate();
break;
case MotionEvent.ACTION_UP:
showAction(v);
//v.layout(l, t, r, b);
break;
default:
break;
};
}else{
//触摸其他部位清空选择。
//pageView.clearSelect();
}
return true;
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.cursor_left || v.getId() == R.id.cursor_right) {
int ea = event.getAction();
//final int screenWidth = dm.widthPixels;
//final int screenHeight = dm.heightPixels;
switch (ea) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();// 获取触摸事件触摸位置的原始X坐标
lastY = (int) event.getRawY();
readLongPress.setVisibility(View.INVISIBLE);
break;
case MotionEvent.ACTION_MOVE:
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;
int l = v.getLeft() + dx;
int b = v.getBottom() + dy;
int r = v.getRight() + dx;
int t = v.getTop() + dy;
v.layout(l, t, r, b);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
v.postInvalidate();
//移动过程中要画线
pageView.setSelectMode(PageView.SelectMode.SelectMoveForward);
int hh = cursorLeft.getHeight();
int ww = cursorLeft.getWidth();
if (v.getId() == R.id.cursor_left) {
pageView.setFirstSelectTxtChar(pageView.getCurrentTxtChar(lastX + ww, lastY - hh));
} else {
pageView.setLastSelectTxtChar(pageView.getCurrentTxtChar(lastX - ww, lastY - hh));
}
pageView.invalidate();
break;
case MotionEvent.ACTION_UP:
showAction(v);
//v.layout(l, t, r, b);
break;
default:
break;
}
}
return true;
}
public static void postInvalidateOnAnimation(View view, int left, int top, int right, int bottom) {
view.postInvalidate(left, top, right, bottom);
}
/**
* 把postInvalidate换成这个方法
* @param aView view
*/
public static void postInvalidate(View aView) {
if (aView != null) {
aView.postInvalidate();
}
}
public static void a(View view, int i, int j, int k, int l)
{
view.postInvalidate(i, j, k, l);
}
public static void postInvalidateOnAnimation(View view, int left, int top,
int right, int bottom) {
view.postInvalidate(left, top, right, bottom);
}
public static void postInvalidateOnAnimation(View view, int left, int top,
int right, int bottom) {
view.postInvalidate(left, top, right, bottom);
}
public static void postInvalidateOnAnimation(View view, int left, int top,
int right, int bottom) {
view.postInvalidate(left, top, right, bottom);
}
public static void postInvalidateOnAnimation(View view, int left, int top,
int right, int bottom) {
view.postInvalidate(left, top, right, bottom);
}
/**
* <p>Cause an invalidate to happen on the next animation time step, typically the
* next display frame.</p>
*
* <p>This method can be invoked from outside of the UI thread
* only when this View is attached to a window.</p>
*
* @param view View to invalidate
*/
public static void postInvalidateOnAnimation(View view) {
if (Build.VERSION.SDK_INT >= 16) {
view.postInvalidateOnAnimation();
} else {
view.postInvalidate();
}
}