一、隐藏Camera主界面的滤镜按钮
feature/setting/matrixdisplay/src/com/mediatek/camera/feature/setting/matrixdisplay/MatrixDisplay.java
public void refreshViewEntry() {
if (mImageView != null) {
if (getEntryValues().size() <= 1) {
mImageView.setVisibility(View.GONE);
} else {
/*<20180709 OR by xza 0000090 begin>*/
//总是隐藏滤镜按钮
//mImageView.setVisibility(View.VISIBLE);
mImageView.setVisibility(View.GONE);
/*<20180709 OR by xza 0000090 end>*/
}
}
}
二、获取滤镜控件
host/src/com/mediatek/camera/ui/EffectViewManager.java
/*<20180709 OR by xza 0000090>*/
public View getViewEtry(){
return mViewEntry;
}
host/src/com/mediatek/camera/ui/CameraAppUI.java
/*<20180709 OR by xza 0000090 begin>*/
//获取滤镜控件
public View getEffectViewEntry(){
return mEffectViewManager.getViewEtry();
}
/*<20180709 OR by xza 0000090 end>*/
host/src/com/mediatek/camera/CameraActivity.java
/*<20180709 OR by xza 0000090 begin> */
//获取滤镜控件
public View getEffectView(){
return mCameraAppUI.getEffectViewEntry();
}
/*<20180709 OR by xza 0000090 begin>*/
三、ModePickerFragment中添加滤镜按钮点击事件
host/src/com/mediatek/camera/ui/modepicker/ModePickerFragment.java
/*<20180709 OR by xza 0000090>*/
private View mEffectView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
......
/*<20180709 OR by xza 0000090>*/
mEffectView=((CameraActivity)getActivity()).getEffectView();
......
return view;
}
private class OnViewItemClickListenerImpl implements ModeItemAdapter.OnViewItemClickListener {
@Override
public boolean onItemCLicked(ModePickerManager.ModeInfo modeInfo) {
......
}
/*<20180709 OR by xza 0000090 begin>*/
@Override
public void onItemEffectClick(View view){
ModePickerFragment.this.getActivity().getFragmentManager().popBackStack();
if(mEffectView!=null&&!mCurrentModeName.equals(
getActivity().getResources().getString(R.string.slow_motion_title)))
mEffectView.performClick();
}
}
/*<20180709 OR by xza 0000090 end>*/
}
六、在Adpater中添加滤镜item,并且注册点击事件
host/src/com/mediatek/camera/ui/modepicker/ModeItemAdapter.java
public enum ITEM_TYPE {
ITEM_TYPE_IMAGE,
/*<20180709 OR by xza 0000090 begin>*/
//添加滤镜类型
ITEM_TYPE_EFFECT
/*<20180709 OR by xza 0000090 end>*/
}
public interface OnViewItemClickListener {
boolean onItemCLicked(ModePickerManager.ModeInfo modeInfo);
/*<20180709 OR by xza 0000090 begin>*/
void onItemEffectClick(View view);
/*<20180709 OR by xza 0000090 end>*/
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/*<20180709 OR by xza 0000090 begin>*/
//根据类型,返回不同布局
// return new ModeViewHolder(mLayoutInflater.inflate(R.layout.mode_item, parent, false));
if(viewType == ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal()){
return new ModeViewHolder(mLayoutInflater.inflate(R.layout.mode_item, parent, false));
}else{
return new EffectViewHold(mLayoutInflater.inflate(R.layout.mode_item_effect, parent, false));
}
/*<20180709 OR by xza 0000090 end>*/
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
......
/*<20180709 OR by xza 0000090 begin>*/
//初始化滤镜viewholder
else if(holder instanceof EffectViewHold){
((EffectViewHold) holder).mEffectTextView.setText("滤镜");
((EffectViewHold) holder).mEffectImageView.setImageResource(R.drawable.ic_matrix_display_entry);
}
/*<20180709 OR by xza 0000090 end>*/
}
@Override
public int getItemViewType(int position) {
/*<20180709 OR by xza 0000090 begin>*/
//判断如果是最后一个item,则返回滤镜的类型
// return ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal();
if(getItemCount()!=0&&position==getItemCount()-1){
return ITEM_TYPE.ITEM_TYPE_EFFECT.ordinal();
}else{
return ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal();
}
/*<20180709 OR by xza 0000090 end>*/
}
@Override
public int getItemCount() {
/*<20180709 OR by xza 0000090 begin>*/
//为滤镜添加一个item
// return mModes == null ? 0 : mModes.size();
return mModes == null ? 0 : mModes.size()+1;
/*<20180709 OR by xza 0000090 end>*/
}
/*<20180709 OR by xza 0000090 begin>*/
//滤镜的viewholder,并且注册点击事件
private class EffectViewHold extends RecyclerView.ViewHolder
implements View.OnClickListener{
TextView mEffectTextView;
ImageView mEffectImageView;
View mEffectModeView;
EffectViewHold (View view) {
super(view);
mEffectModeView = view;
mEffectTextView = (TextView) view.findViewById(R.id.text_effect_view);
mEffectImageView = (ImageView) view.findViewById(R.id.image_effect_view);
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mClickedListener.onItemEffectClick(mEffectModeView);
}
}
/*<20180709 OR by xza 0000090 end>*/
host/res/layout/mode_item_effect.xml
<?xml version="1.0" encoding="utf-8"?>
<!--20180709 OR by xza 0000091 add-->
<com.mediatek.camera.ui.modepicker.RotateLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/selector_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/image_view"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_centerHorizontal="true"
android:scaleType="fitXY"
app:srcCompat="@drawable/ic_normal_mode_unselected" />
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/image_view"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:textColor="@android:color/white"
android:textSize="18dp" />
</RelativeLayout>
</FrameLayout>
</com.mediatek.camera.ui.modepicker.RotateLayout>
因为对底层代码不熟悉,所以只是修改了上层应用部分,个人感觉从底层修
改添加mode会更合适。