Эффект параллакса на Android? - PullRequest
0 голосов
/ 25 октября 2019

Я хочу сделать эффект параллакса в Android, я искал предложения и читал об акселерометре. Если кто-то что-то знает или имеет какие-либо идеи, пожалуйста, помогите мне. Это мой код, но он не выполняет ту работу, которую я хочу:

class ProfileFragment : Fragment() {
    private var sharedViewModel: SharedViewModel? = null

    private var sensorManager: SensorManager? = null
    private var sensorGyr: Sensor? = null

    private var height:Int? = null
    private var width:Int? = null

    private lateinit var viewModel: ProfileViewModel

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.profile_fragment, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProviders.of(this).get(ProfileViewModel::class.java)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        initViewModelToActivity()
        parallaxEffect()
    }

    fun initViewModelToActivity(){
        activity?.let {
            sharedViewModel = ViewModelProviders.of(it).get(SharedViewModel::class.java)
        }
        val handler = Handler()
        handler.postDelayed({
            sharedViewModel?.ColorBottomNavDefaul?.postValue("Perfil")
        },100)

    }

    fun parallaxEffect(){
        sensorManager = activity?.getSystemService(Context.SENSOR_SERVICE) as SensorManager?
        sensorGyr = sensorManager?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

        val displayMetrics = DisplayMetrics()
        activity?.windowManager?.defaultDisplay?.getMetrics(displayMetrics)
        height=displayMetrics.heightPixels
        width=displayMetrics.widthPixels

        if (sensorGyr == null)
            Toast.makeText(context, "No tiene el sensor", Toast.LENGTH_SHORT).show()

        val mEventListener = object : SensorEventListener {
            override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {

            }
            override fun onSensorChanged(event: SensorEvent) {
                val anim1 = TranslateAnimation(0f, 16f, 0f,0f)
                anim1.duration = 500

                if(event.values[0] > 5) {
                    Log.d("Movement", "+5")
                    anim1.fillAfter = true
                    bg.startAnimation(anim1)
                }
                if(event.values[0] < -5) {
                    Log.d("Movement", "-5")
                    anim1.fillAfter = true
                    anim1.repeatCount = -1
                    anim1.repeatMode = Animation.REVERSE
                    bg.startAnimation(anim1)
                }
            }
        }
        sensorManager?.registerListener(mEventListener,sensorGyr, SensorManager.SENSOR_DELAY_FASTEST)
    }
}
...