day09 event ViewFlipper GestureDetector

  1. 监听事件 特定的事件
    listener
  2. 回调方法 通用性的事件
    onTouchEvent
    onKeyDown
    onKeyUp
    onKeyLongPress
  3. 常用的物理按钮
    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);
  1. 手势检测
    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 版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值