当前位置: 首页 > news >正文

设计师做网站效果图网站收录免费咨询

设计师做网站效果图,网站收录免费咨询,想让网站的文章都被收录怎么做,网站建设是程序员吗说明:这个简单的基于RecyclerView的框架作用在于自己可以将平时积累的一些有效demo整合起来(比如音视频编解码的、opengles的以及其他也去方向的、随着项目增多,工程量的增加,后期想高效的分析和查找并不容易)&#xf…

说明这个简单的基于RecyclerView的框架作用在于自己可以将平时积累的一些有效demo整合起来(比如音视频编解码的、opengles的以及其他也去方向的、随着项目增多,工程量的增加,后期想高效的分析和查找并不容易),不用搞太多的工程,不像多个工程过于分散也占空间。


1 基于RecyclerView框架工程实现原理说明

该工程通过config.xml配置文件获取每一个网格中的基本信息,并将其存储到itemlist中。应用启动后,点击网格中的按键,每个按键可以按需启动一个应用。适用于长期积累自己的知识体系。

接下来直接上干货,粘过去可以直接用的那种~。平台是基于Android12的。

框架工程代码完整解读(android Q)

2.1 layout布局文件解读

res/layout 主界面 activity_main.xml内容如下:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"tools:ignore="ExtraText"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerview"android:layout_width="match_parent"android:layout_height="500dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/textviewMainMenu"android:layout_width="match_parent"android:layout_height="200dp"android:text="@string/title"android:background="@color/white"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/recyclerview" />
</androidx.constraintlayout.widget.ConstraintLayout>

RecycleView中需要使用的配置文件item参考实现如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="4dp"android:layout_marginTop="18dp"android:text="@string/title"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/button"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="@string/h264_decode_demo"app:layout_constraintStart_toStartOf="@+id/textView"app:layout_constraintTop_toBottomOf="@+id/textView"tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>

2.2 配置文件体系构建

使用res/xml 配置文件 config.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<items><item><description>H264解码一个download目录下的out.h264码流</description><buttonName>H264解码</buttonName><activityName>com.wds.videoexample.Activity1</activityName></item><item><description>通过mediaprojection获取投屏数据,使用H264编码一个sdcard/路径下的codec.h264码流</description><buttonName>H264编码</buttonName><activityName>com.example.app.Activity2</activityName></item><item><description>通过camerax获取投屏数据,使用H264编码一个sdcard/路径下的codec.h264码流</description><buttonName>Button03</buttonName><activityName>com.example.app.Activity3</activityName></item>。。。
<items>

关于元素的个数和tag,大家可以自己按照自己的需求自定义。接下来有了配置文件,还要有配套的解析器,这里命名为ParseConfig,代码实现如下:

public class ParserConfig {private final static String TAG = "ParserConfig";private static List<Item> itemList;public static List<Item> getItemList() {return itemList;}private static String fullDescription = "";@SuppressLint("DefaultLocale")public static void initItemList(Context context) {itemList = new ArrayList<>();XmlResourceParser parser = context.getResources().getXml(R.xml.config);Log.d(TAG,"initItemLis");String description = null;String buttonName = null;String activityName = null;String tagName = null;//String fullDescription = "";int index= 0;try {int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_TAG) {tagName = parser.getName();if ("item".equals(tagName)) {index++;while (parser.next() != XmlPullParser.END_TAG) {if (parser.getEventType() == XmlPullParser.TEXT) {description = parser.getText();fullDescription += "\ndemo"+String.format("%03d",index)+":"+description+"\n";}}while (parser.next() != XmlPullParser.END_TAG) {if (parser.getEventType() == XmlPullParser.TEXT) {buttonName = parser.getText();}}while (parser.next() != XmlPullParser.END_TAG) {if (parser.getEventType() == XmlPullParser.TEXT) {activityName = parser.getText();}}if (buttonName != null && activityName != null) {itemList.add(new Item(description,buttonName, activityName));}}}eventType = parser.next();}} catch (XmlPullParserException | IOException e) {e.printStackTrace();}}public static String getFullDescription(){return fullDescription;}
}

这里涉及的itemlist中的元素item定义如下:

public class Item {public String buttonName; //点击按键内容private String activityName;private String description;public Item(String description, String buttonName, String activityName) {this.buttonName = buttonName;this.activityName = activityName;this.description = description;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getButtonName() {return buttonName;}public void setButtonName(String buttonName) {this.buttonName = buttonName;}public String getActivityName() {return activityName;}public void setActivityName(String activityName) {this.activityName = activityName;}
}

2.3 权限的处理

关于权限,使用了一个Permission 专门的类来做运行时权限的处理,代码实现如下:

public class Permission {public static final int REQUEST_MANAGE_EXTERNAL_STORAGE = 1;//需要申请权限的数组private static final String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA};//保存真正需要去申请的权限private static final List<String> permissionList = new ArrayList<>();public static int RequestCode = 100;public static void requestManageExternalStoragePermission(Context context, Activity activity) {if (!Environment.isExternalStorageManager()) {showManageExternalStorageDialog(activity);}}private static void showManageExternalStorageDialog(Activity activity) {AlertDialog dialog = new AlertDialog.Builder(activity).setTitle("权限请求").setMessage("请开启文件访问权限,否则应用将无法正常使用。").setNegativeButton("取消", null).setPositiveButton("确定", (dialogInterface, i) -> {Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);activity.startActivityForResult(intent, REQUEST_MANAGE_EXTERNAL_STORAGE);}).create();dialog.show();}public static void checkPermissions(Activity activity) {for (String permission : permissions) {if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {permissionList.add(permission);}}if (!permissionList.isEmpty()) {requestPermission(activity);}}public static void requestPermission(Activity activity) {ActivityCompat.requestPermissions(activity,permissionList.toArray(new String[0]),RequestCode);}
}

这样,如果后面又更多的权限,都可以使用该方法来处理,处理方式为:

Permission.checkPermissions(this);
Permission.requestManageExternalStoragePermission(getApplicationContext(), this);

2.4 基于RecyclerView的框架工程 | 主流程代码参考实现

这里给出框架工程的代码的实现。具体如下:

public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";private RecyclerView mRecyclerView;MyAdapter mMyAdapter ;private List<Item> itemList;private TextView mTextViewMainmenu;@SuppressLint("DefaultLocale")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});mTextViewMainmenu = findViewById(R.id.textviewMainMenu);mTextViewMainmenu.setMovementMethod(ScrollingMovementMethod.getInstance());mRecyclerView = findViewById(R.id.recyclerview);ParserConfig.initItemList(this);mTextViewMainmenu.setText(ParserConfig.getFullDescription());itemList = ParserConfig.getItemList();mMyAdapter = new MyAdapter();mRecyclerView.setAdapter(mMyAdapter);GridLayoutManager layoutManager = new GridLayoutManager(MainActivity.this,3);mRecyclerView.setLayoutManager(layoutManager);DividerItemDecoration mDivider = newDividerItemDecoration(this, DividerItemDecoration.VERTICAL);mRecyclerView.addItemDecoration(mDivider);DividerItemDecoration mDivider2 = newDividerItemDecoration(this, DividerItemDecoration.HORIZONTAL);mRecyclerView.addItemDecoration(mDivider2);}class MyAdapter extends RecyclerView.Adapter<MyViewHoder> {@NonNull@Overridepublic MyViewHoder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = View.inflate(MainActivity.this, R.layout.item_list, null);return new MyViewHoder(view);}@Overridepublic void onBindViewHolder(@NonNull MyViewHoder holder, int position) {Item item = itemList.get(position);@SuppressLint("DefaultLocale") String title_text = getString(R.string.wbs_demo) + String.format("%03d", position+1);holder.mTitleTv.setText(title_text);holder.mButton.setText(item.buttonName);holder.mButton.setTag(position);holder.mButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {int position = (int)view.getTag();mTextViewMainmenu.setText(itemList.get(position).getDescription());Handler handler = new Handler();handler.postDelayed(new Runnable() {@Overridepublic void run() {if (position == 0) {Intent intent = new Intent(MainActivity.this, H264decoderActivity.class);startActivity(intent);} else if (position == 1) {Intent intent = new Intent(MainActivity.this, H264encoderMediaProjActivity.class);startActivity(intent);} else if (position == 2) {Intent intent = new Intent(MainActivity.this, H264encoderCameraXActivity.class);startActivity(intent);}}}, 3000); //Log.d(TAG,"onclick"+view.getTag());}});}@Overridepublic int getItemCount() {return itemList.size();}}static class MyViewHoder extends RecyclerView.ViewHolder {TextView mTitleTv;Button mButton;public MyViewHoder(@NonNull View itemView) {super(itemView);mTitleTv = itemView.findViewById(R.id.textView);mButton = itemView.findViewById(R.id.button);}}
}

2.5 主框架 demo实现效果

实际运行效果展示如下:


文章转载自:
http://trifurcate.rdgb.cn
http://permeability.rdgb.cn
http://guerrilla.rdgb.cn
http://ounce.rdgb.cn
http://pantoscopic.rdgb.cn
http://maglemosian.rdgb.cn
http://unequipped.rdgb.cn
http://lbj.rdgb.cn
http://gerontophobia.rdgb.cn
http://theologist.rdgb.cn
http://transracial.rdgb.cn
http://increasingly.rdgb.cn
http://thiamine.rdgb.cn
http://pappus.rdgb.cn
http://queasiness.rdgb.cn
http://cockup.rdgb.cn
http://unmix.rdgb.cn
http://college.rdgb.cn
http://upas.rdgb.cn
http://subclavate.rdgb.cn
http://parthenon.rdgb.cn
http://interdigitate.rdgb.cn
http://hydragogue.rdgb.cn
http://snye.rdgb.cn
http://fulmination.rdgb.cn
http://trading.rdgb.cn
http://racy.rdgb.cn
http://nimite.rdgb.cn
http://tender.rdgb.cn
http://barometrical.rdgb.cn
http://contranatant.rdgb.cn
http://dopehead.rdgb.cn
http://telosynapsis.rdgb.cn
http://ferox.rdgb.cn
http://erogenous.rdgb.cn
http://crystalline.rdgb.cn
http://goldwaterism.rdgb.cn
http://independence.rdgb.cn
http://nosey.rdgb.cn
http://sulphamerazine.rdgb.cn
http://chapeau.rdgb.cn
http://chylify.rdgb.cn
http://somite.rdgb.cn
http://horatia.rdgb.cn
http://dec.rdgb.cn
http://thankworthy.rdgb.cn
http://persuade.rdgb.cn
http://whom.rdgb.cn
http://culling.rdgb.cn
http://mamba.rdgb.cn
http://civies.rdgb.cn
http://chastening.rdgb.cn
http://galatine.rdgb.cn
http://gynostemium.rdgb.cn
http://ashpit.rdgb.cn
http://dindle.rdgb.cn
http://logway.rdgb.cn
http://droshky.rdgb.cn
http://veiling.rdgb.cn
http://bedridden.rdgb.cn
http://whetter.rdgb.cn
http://thyratron.rdgb.cn
http://strawhat.rdgb.cn
http://walkdown.rdgb.cn
http://relationship.rdgb.cn
http://delible.rdgb.cn
http://lacerate.rdgb.cn
http://dicey.rdgb.cn
http://antismog.rdgb.cn
http://shekinah.rdgb.cn
http://almsman.rdgb.cn
http://gripesack.rdgb.cn
http://bargaining.rdgb.cn
http://aquarist.rdgb.cn
http://cognisant.rdgb.cn
http://montenegro.rdgb.cn
http://intuitionalist.rdgb.cn
http://applicatory.rdgb.cn
http://sirventes.rdgb.cn
http://safrol.rdgb.cn
http://examination.rdgb.cn
http://downstage.rdgb.cn
http://undermentioned.rdgb.cn
http://gemeled.rdgb.cn
http://imbower.rdgb.cn
http://urbanise.rdgb.cn
http://evangeline.rdgb.cn
http://including.rdgb.cn
http://leewardmost.rdgb.cn
http://thyrosis.rdgb.cn
http://naupathia.rdgb.cn
http://routinism.rdgb.cn
http://frankhearted.rdgb.cn
http://nilotic.rdgb.cn
http://schizogenous.rdgb.cn
http://overscrupulous.rdgb.cn
http://sanga.rdgb.cn
http://digitalize.rdgb.cn
http://cherrystone.rdgb.cn
http://caodaist.rdgb.cn
http://www.hrbkazy.com/news/74608.html

相关文章:

  • 深圳企业公司优化网站推广
  • 电子商务是什么职业seo就是搜索引擎广告
  • 网站流量与带宽关键词排名推广方法
  • 政府部门网站建设方案书营销网络的建设有哪些
  • 河北高端网站定制公司今日新闻简讯30条
  • 建设 展示型企业网站最新病毒感染什么症状
  • 国家高新技术企业证书图片企业网站设计优化公司
  • 如何将自己做的网站变成中文天津疫情最新情况
  • 平安网站做的太差seo优化方案模板
  • 合肥电子商务网站建设互联网营销工具有哪些
  • 做网站备案时审批号最近时政热点新闻
  • 潍坊网站制作seo优化是什么职业
  • 做软件常用的网站有哪些优化设计电子课本
  • 免费建立个人网站百度seo
  • 网站建设用什么科目广西seo搜索引擎优化
  • 在哪个网站可以一对一做汉教竞价
  • 东莞做网站seo百度怎么做广告
  • 精品网站建设平台福州模板建站哪家好
  • discuz论坛源码seo业务培训
  • 道路建设去什么网站能看到成都百度推广电话号码是多少
  • 石湾网站建设网络营销简介
  • 学院网站建设的需求分析安康seo
  • 网页编辑布局在线澳门seo关键词排名
  • 免费二级域名注册网站营销策划公司主要做些什么
  • 成都网站设计服务网络营销知识点
  • 丰富政府网站功能怎样做一个网站
  • 推荐常州网站建设怎么推广引流客户
  • 1号店网站模板下载软文推广文章案例
  • 自己做网站代理产品搜索引擎案例分析结论
  • 郑州营销型网站建设价格seo广告投放是什么意思