Skip to content

Commit 840838b

Browse files
committed
新增menu示例,鼠标可以点击
1 parent cb3559d commit 840838b

3 files changed

Lines changed: 80 additions & 13 deletions

File tree

Lines changed: 64 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package org.evilbinary.tv;
22

33
import android.app.Activity;
4+
import android.content.Context;
45
import android.os.Bundle;
56
import android.support.v7.widget.GridLayoutManager;
67
import android.support.v7.widget.LinearLayoutManager;
78
import android.support.v7.widget.RecyclerView;
89
import android.util.Log;
910
import android.view.View;
11+
import android.widget.Toast;
1012

1113
import org.evilbinary.tv.widget.BorderView;
1214

@@ -17,7 +19,7 @@
1719
public class DemoMenuActivity extends Activity {
1820
private BorderView border;
1921

20-
22+
private Context mContext;
2123
private String mCategory[] = new String[]{"全部频道", "美食", "休闲娱乐", "购物"};
2224
//二级列表数据
2325
private String mDatas[][] = new String[][]{
@@ -30,32 +32,65 @@ public class DemoMenuActivity extends Activity {
3032

3133
private MyAdapter secondAdapter;
3234
private View lastFocus = null;
35+
private View lastSubFocus = null;
36+
37+
private RecyclerView secondRecyclerView;
38+
private GridLayoutManager layoutManager2;
3339

3440
@Override
3541
protected void onCreate(Bundle savedInstanceState) {
3642
super.onCreate(savedInstanceState);
3743
setContentView(R.layout.demo_menu);
38-
44+
mContext = this;
3945

4046
border = new BorderView(this);
4147
border.setBackgroundResource(R.drawable.border_red);
4248

4349
RecyclerView firstRecyclerView = (RecyclerView) findViewById(R.id.firstRecyclerView);
44-
RecyclerView secondRecyclerView = (RecyclerView) findViewById(R.id.secondRecyclerView);
50+
secondRecyclerView = (RecyclerView) findViewById(R.id.secondRecyclerView);
4551

4652
GridLayoutManager layoutManager = new GridLayoutManager(this, 1);
4753
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
4854
firstRecyclerView.setLayoutManager(layoutManager);
4955
firstRecyclerView.setFocusable(false);
5056

5157

52-
GridLayoutManager layoutManager2 = new GridLayoutManager(this, 1);
58+
layoutManager2 = new GridLayoutManager(this, 1);
5359
layoutManager2.setOrientation(LinearLayoutManager.VERTICAL);
5460
secondRecyclerView.setLayoutManager(layoutManager2);
5561
secondRecyclerView.setFocusable(false);
5662

5763

58-
secondAdapter = new MyAdapter(this, new String[]{}, R.layout.item_menu_sub);
64+
secondAdapter = new MyAdapter(this, new String[]{}, R.layout.item_menu_sub, new View.OnFocusChangeListener() {
65+
@Override
66+
public void onFocusChange(View v, boolean hasFocus) {
67+
68+
if (hasFocus) {
69+
if (lastSubFocus != null)
70+
lastSubFocus.setBackgroundResource(R.drawable.list_item_shape);
71+
lastSubFocus = v;
72+
v.setBackgroundResource(R.drawable.shape);
73+
74+
}
75+
76+
}
77+
});
78+
secondAdapter.setOnBindListener(new MyAdapter.OnBindListener() {
79+
@Override
80+
public void onBind(View view, int i) {
81+
Log.d("tt", "onBind===>" + i);
82+
83+
if (lastSubFocus == null||((int)lastSubFocus.getTag())==i) {
84+
view.setBackgroundResource(R.drawable.shape);
85+
lastSubFocus = view;
86+
}else{
87+
view.setBackgroundResource(R.drawable.list_item_shape);
88+
89+
}
90+
view.setOnClickListener(onClickListener);
91+
92+
}
93+
});
5994
secondRecyclerView.setAdapter(secondAdapter);
6095

6196

@@ -64,32 +99,51 @@ protected void onCreate(Bundle savedInstanceState) {
6499
@Override
65100
public void onFocusChange(View v, boolean hasFocus) {
66101
if (hasFocus) {
102+
if (v != lastFocus)
103+
lastSubFocus = null;
104+
67105
int pos = (int) v.getTag();
68106
secondAdapter.setData(mDatas[pos]);
69107
secondAdapter.notifyDataSetChanged();
70-
Log.d("tt", "onFocusChange===>" + pos);
71108

72-
if(lastFocus!=null)
109+
Log.d("tt", "onFocusChange===>" + pos);
110+
if (lastFocus != null)
73111
lastFocus.setBackgroundResource(R.drawable.list_item_shape);
74112
lastFocus = v;
75113
v.setBackgroundResource(R.drawable.shape);
114+
}
76115

77116

78-
} else {
79-
//v.setBackgroundColor(Color.RED);
80-
}
117+
}
118+
});
119+
adapter.setOnBindListener(new MyAdapter.OnBindListener() {
120+
@Override
121+
public void onBind(View view, int i) {
122+
view.setOnClickListener(onClickListener);
81123
}
82124
});
83125
// 设置Adapter
84126
firstRecyclerView.setAdapter(adapter);
85127
firstRecyclerView.scrollToPosition(0);
86128

129+
87130
border.getEffect().setScalable(false);
131+
border.getEffect().setEnableTouch(false);
88132
border.attachTo(firstRecyclerView);
89133
border.attachTo(secondRecyclerView);
90134

91135

92136
}
93137

138+
private View.OnClickListener onClickListener = new View.OnClickListener() {
139+
@Override
140+
public void onClick(View v) {
141+
int pos = (int) v.getTag();
142+
String tip = "click===" + pos;
143+
Toast.makeText(mContext, tip, Toast.LENGTH_SHORT).show();
144+
v.setFocusableInTouchMode(true);
145+
v.requestFocus();
146+
}
147+
};
94148

95149
}

app/src/main/java/org/evilbinary/tv/MyAdapter.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
1818
private Context mContex;
1919
private int id;
2020
private View.OnFocusChangeListener mOnFocusChangeListener;
21+
private OnBindListener onBindListener;
22+
public interface OnBindListener{
23+
public void onBind(View view,int i);
24+
};
2125

2226
public MyAdapter(Context context, String[] dataset) {
2327
super();
@@ -39,6 +43,9 @@ public MyAdapter(Context context, String[] dataset,int id,View.OnFocusChangeList
3943
this.mOnFocusChangeListener=onFocusChangeListener;
4044
}
4145

46+
public void setOnBindListener(OnBindListener onBindListener) {
47+
this.onBindListener = onBindListener;
48+
}
4249

4350
@Override
4451
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
@@ -57,7 +64,9 @@ public void onBindViewHolder(ViewHolder viewHolder, int i) {
5764
viewHolder.mTextView.setText(mDataset[i]);
5865
viewHolder.itemView.setTag(i);
5966
viewHolder.itemView.setOnFocusChangeListener(mOnFocusChangeListener);
60-
67+
if(onBindListener!=null){
68+
onBindListener.onBind(viewHolder.itemView,i);
69+
}
6170
}
6271

6372
@Override

lib/src/main/java/org/evilbinary/tv/widget/BorderEffect.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public class BorderEffect implements Effect {
3939
protected List<Animator> mAnimatorList = new ArrayList<Animator>();
4040
protected View mTarget;
4141

42+
protected boolean mEnableTouch=true;
43+
4244
public BorderEffect() {
4345

4446
mFocusListener.add(focusMoveListener);
@@ -450,7 +452,7 @@ public void setFirstFocus(boolean b) {
450452
public void onTouchModeChanged(View target, View attachView, boolean isInTouchMode) {
451453
try {
452454
//Log.d(TAG, "onTouchModeChanged:"+isInTouchMode);
453-
if (isInTouchMode) {
455+
if (mEnableTouch&&isInTouchMode) {
454456
target.setVisibility(View.INVISIBLE);
455457
if (lastFocus != null) {
456458
AnimatorSet animatorSet = new AnimatorSet();
@@ -636,7 +638,9 @@ public <T> T toEffect(Class<T> t) {
636638
return (T) this;
637639
}
638640

639-
641+
public void setEnableTouch(boolean enableTouch){
642+
this.mEnableTouch=enableTouch;
643+
}
640644
public boolean isScalable() {
641645
return mScalable;
642646
}

0 commit comments

Comments
 (0)