android Tv盒子开发 焦点
不知不觉入坑做电视两年多了,终于有时间停下来写点什么,希望对大家用用。
TV开发最大的特色是焦点和焦点动画。
由于电视机输入方式是按键,因此焦点很重要。焦点相当于选中效过果,只有被选中后,那个view才能被点击。
要想让一个view获取焦点,代码如下
view.setFocusable(true); view.requestFocus();
view的聚焦状态是可以监听的,
view.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus){ //v 获得焦点 }else{ //v 失去焦点 } } });一般焦点相关的效果都是这这个监听器里处理的,如当获取焦点时我让view变大,失去焦点的时候恢复正常大小。
完整代码
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/select1" android:layout_width="200px" android:layout_height="300px" android:background="#f00" android:layout_centerVertical="true" android:layout_marginLeft="200px" android:text="菜单一" android:textSize="70px" android:gravity="center" android:focusableInTouchMode="true" > </TextView> <TextView android:id="@+id/select2" android:layout_toRightOf="@+id/select1" android:layout_width="200px" android:layout_height="300px" android:background="#ff0" android:layout_centerVertical="true" android:layout_marginLeft="200px" android:text="菜单二" android:textSize="70px" android:gravity="center" > </TextView> </RelativeLayout>
package com.example.administrator.myapplication; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { View view,view2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); view=findViewById(R.id.select1); view.setFocusable(true);//设置改view可以获得焦点 view.requestFocus();//让该view取得焦点 view.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { TextView textView= (TextView) v; if(hasFocus){ //v 获得焦点 v.setScaleX(1.2f); v.setScaleY(1.2f); textView.setTextColor(Color.GREEN); }else{ //v 失去焦点 v.setScaleX(1f); v.setScaleY(1f); textView.setTextColor(Color.BLACK); } } }); view2=findViewById(R.id.select2); view2.setFocusable(true); view2.requestFocus(); view2.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus){ //v 获得焦点 v.setScaleX(1.2f); v.setScaleY(1.2f); }else{ //v 失去焦点 v.setScaleX(1f); v.setScaleY(1f); } } }); } }