- 监听事件 特定的事件
listener - 回调方法 通用性的事件
onTouchEvent
onKeyDown
onKeyUp
onKeyLongPress - 常用的物理按钮
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_POWER
KEYCODE_BACK
KEYCODE_HOME
KEYCODE_MENU
自定义 上下文菜单
textView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
registerForContextMenu(v);
openContextMenu(v);
return true;
}
});
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add("收藏");
menu.add("举报");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Toast.makeText(this, item.toString(), Toast.LENGTH_LONG).show();
return true;
}
自定义view -imageview
class HatView extends View {
public float bitMapX;
public float bitMapY;
public int bitMapW;
public int bitMapH;
public HatView(Context context) {
super(context);
bitMapX = 65;
bitMapY = 0;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.progressicon);
canvas.drawBitmap(bitmap, bitMapX, bitMapY, paint);
bitMapW = bitmap.getWidth();
bitMapH = bitmap.getHeight();
if (bitmap.isRecycled()) {
bitmap.recycle();
}
}
}
final HatView hatView = new HatView(this);
hatView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float xOffset = (float)(hatView.bitMapW * 0.5);
float yOffset = ( float)(hatView.bitMapH*0.5);
Log.e("error", xOffset +":::" + yOffset);
hatView.bitMapX = event.getX() -xOffset;
hatView.bitMapY = event.getY() -yOffset;
hatView.invalidate();
return true;
}
});
RelativeLayout relativeLayout = (RelativeLayout)findViewById(R.id.layout);
relativeLayout.addView(hatView);
- 手势检测
GestureDetector
GestureDetector.OnGestrueListener
View切换的控件 ViewFlippe
滑动view 操作
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="match_parent"></ViewFlipper>
// step1
Animation[] animations = new Animation[4];
final int distance = 50;
private int[] images = new int[]{R.drawable.img01, R.drawable.img02,R.drawable.img03,
R.drawable.img04, R.drawable.img05,R.drawable.img06,
R.drawable.img07, R.drawable.img08,R.drawable.img09,
};
// step 2
ViewFlipper flipper;
GestureDetector detector;
// step3
detector = new GestureDetector(MainActivity.this, this);
flipper = (ViewFlipper)findViewById(R.id.flipper);
for (int i = 0; i< images.length;i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(images[i]);
flipper.addView(imageView);
}
animations[0] = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
animations[1] = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
animations[2] = AnimationUtils.loadAnimation(this, R.anim.slide_in_right);
animations[3] = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
// step 4
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
// x left right
if (motionEvent.getX() - motionEvent1.getX() > distance) {
flipper.setInAnimation(animations[2]);
flipper.setOutAnimation(animations[1]);
flipper.showPrevious();
return true;
} else if (motionEvent1.getX() - motionEvent.getX() > distance) {
flipper.setInAnimation(animations[0]);
flipper.setOutAnimation(animations[3]);
flipper.showNext();
return true;
}
return false;
}
//step5 touch event to GestureDetecode handle
@Override
public boolean onTouchEvent(MotionEvent event) {
return detector.onTouchEvent(event);
}
重写方法
onDown onFling(move) onLongPress onScroll onShowPress onSingleTapUp(轻击)
Failed to resolve: com.android.support:appcompat-v7:29.+
通过setting 查看 system settings -> updates 和 android sdk 查看 sdk tools 和 sdk build tools 版本。