美文网首页
夜神面试记录 2020-03-14

夜神面试记录 2020-03-14

作者: 向前的zz | 来源:发表于2020-03-16 14:36 被阅读0次

    夜神面试总结
    字节码的理解, 单例,view布局, 滑动触摸

    第一个题大概是这样的

    public class RunTest {
        public static class A {
            public A() {
                System.out.println("A");
            }
        }
    
        public static class B extends A {
            public B() {
                System.out.println("B");
            }
        }
    
        public static class D {
            public  A a2 = new A();
            public static A a = new B();
            static  {
                System.out.println("------");
            }
        }
    
        public static void main(String[] args) {
            new D();
        }
    }
    

    默认先new静态的对象,然后再new非静态的对象
    执行结果如下:

    A
    B
    ------
    A
    

    单例

    静态内部类,双锁

    view布局优化

    略,一个icon变成4个icon然后使用frameLayout,我觉得就可以了

    滑动触摸

    就是实现下面类似的功能


    1.gif

    实现方式如下(可能有许多种,先写这一种)

    //MainActivity
    class MainActivity : AppCompatActivity() {
        companion object {
            val TAG = "MainActivity"
        }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            aView.setBView(bView)
            aView.setCView(cView)
    
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <View
            android:id="@+id/cView"
            android:background="#ff0000"
            android:layout_gravity="bottom"
            android:layout_width="200dp"
            android:layout_height="400dp"/>
    
        <View
            android:id="@+id/bView"
            android:background="#00ff00"
            android:layout_gravity="bottom"
            android:layout_width="100dp"
            android:layout_height="300dp"/>
    
        <com.zhousaito.eventdemo.widget.CView
            android:id="@+id/aView"
            android:background="#0000ff"
            android:layout_gravity="bottom"
            android:layout_width="100dp"
            android:layout_height="50dp"/>
    </FrameLayout>
    
    class CView
    @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
        View(context, attrs, defStyle) {
        companion object {
            var TAG = "CView"
        }
    
        var mLastY = 0f;
    
        var mBView: View? = null
        var mCView: View? = null
    
        override fun onTouchEvent(event: MotionEvent): Boolean {
            Log.e(MainActivity.TAG, "${y}  ${event.y}")
            val y = event.y
    
            when (event.action) {
                MotionEvent.ACTION_DOWN -> {
                    mLastY = y
                }
                MotionEvent.ACTION_MOVE -> {
                    val offsetY = y - mLastY
                    Log.e(TAG, "" + top + " -- ${mBView?.top}")
    
                    var bTop = mBView?.top ?: 0
    
                    layout(
                        left, (top + offsetY).toInt(),
                        right, (bottom + offsetY).toInt()
                    )
    
                    //当top相同的时候,一起滑动
                    if (bTop >= top) {
                        mBView?.layout(
                            mBView?.left ?: 0, ((mBView?.top ?: 0) + offsetY).toInt(),
                            mBView?.right ?: 0, ((mBView?.bottom ?: 0) + offsetY).toInt()
                        )
                        var cTop = mCView?.top ?: 0
                        if (cTop >= top) {
                            mCView?.layout(
                                mCView?.left ?: 0, ((mCView?.top ?: 0) + offsetY).toInt(),
                                mCView?.right ?: 0, ((mCView?.bottom ?: 0) + offsetY).toInt()
                            )
                        }
                    }
                }
    
            }
            return true
        }
    
        fun setBView(bView: View?) {
            mBView = bView
        }
    
        fun setCView(cView: View?) {
            mCView = cView
        }
    }
    

    相关文章

      网友评论

          本文标题:夜神面试记录 2020-03-14

          本文链接:https://www.haomeiwen.com/subject/bulgshtx.html