不知不觉入坑做电视两年多了,终于有时间停下来写点什么,希望对大家用用。
TV开发最大的特色是焦点和焦点动画。
由于电视机输入方式是按键,因此焦点很重要。焦点相当于选中效过果,只有被选中后,那个view才能被点击。
要想让一个view获取焦点,代码如下
view.setFocusable(true); view.requestFocus();
view的聚焦状态是可以监听的,
view.setOnFocusChangeListener(newView.OnFocusChangeListener() {@Overridepublic voidonFocusChange(View v,booleanhasFocus) {if(hasFocus){//v 获得焦点 }else{//v 失去焦点 }}});
一般焦点相关的效果都是这这个监听器里处理的,如当获取焦点时我让view变大,失去焦点的时候恢复正常大小。
完整代码
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android" xmlns:tools="/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>
packagecom.example.administrator.myapplication;importandroid.graphics.Color;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.TextView;public classMainActivityextendsAppCompatActivity {View view,view2;@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);view=findViewById(R.id.select1);view.setFocusable(true);//设置改view可以获得焦点 view.requestFocus();//让该view取得焦点 view.setOnFocusChangeListener(newView.OnFocusChangeListener() {@Overridepublic voidonFocusChange(View v,booleanhasFocus) {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(newView.OnFocusChangeListener() {@Overridepublic voidonFocusChange(View v,booleanhasFocus) {if(hasFocus){//v 获得焦点v.setScaleX(1.2f);v.setScaleY(1.2f);}else{//v 失去焦点 v.setScaleX(1f);v.setScaleY(1f);}}});}}