需求记录(共享元素)
MainActivity1 列表展示,使用共享元素完成页面间的切换
package com.example.animactivity;import android.annotation.SuppressLint;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.transition.ChangeBounds;
import android.transition.Fade;
import android.transition.TransitionSet;
import android.view.View;
import android.widget.ImageView;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.view.ViewCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;import java.util.ArrayList;public class MainActivity1 extends AppCompatActivity {private RecyclerView main1_rv;private Img1Adapter img1Adapter;private ArrayList<Bean> img_list;@SuppressLint("MissingInflatedId")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);main1_rv = findViewById(R.id.main1_rv);initData();img1Adapter = new Img1Adapter(getApplicationContext(), R.layout.main1_item_layout, img_list);main1_rv.setLayoutManager(new LinearLayoutManager(this));main1_rv.setAdapter(img1Adapter);ActivityCompat.startPostponedEnterTransition(this);img1Adapter.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(@NonNull BaseQuickAdapter<?, ?> baseQuickAdapter, @NonNull View view, int i) {ImageView img1 = view.findViewById(R.id.img1);jumpToNextActivity(img1, img_list.get(i));}});}private void initData() {img_list = new ArrayList<>();img_list.add(new Bean(R.drawable.img, "name0"));img_list.add(new Bean(R.drawable.img1, "name1"));img_list.add(new Bean(R.drawable.img2, "name2"));img_list.add(new Bean(R.drawable.img3, "name3"));img_list.add(new Bean(R.drawable.img4, "name4"));img_list.add(new Bean(R.drawable.img5, "name5"));img_list.add(new Bean(R.drawable.img6, "name6"));img_list.add(new Bean(R.drawable.img7, "name7"));img_list.add(new Bean(R.drawable.img8, "name8"));img_list.add(new Bean(R.drawable.img9, "name9"));img_list.add(new Bean(R.drawable.img10, "name10"));}/*** 共享元素跳转** @param img1*/private void jump(ImageView img1) {Intent intent = new Intent(MainActivity1.this, MainActivity2.class);ActivityOptionsCompat sharedElement = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity1.this, img1, "shared element");startActivity(intent, sharedElement.toBundle());}/*** 给跳转设置时间** @param img1* @param data*/private void jumpToNextActivity(ImageView img1, Bean data) {// 创建一个TransitionSet,包含了Fade和ChangeBounds两种过渡效果TransitionSet transition = new TransitionSet().addTransition(new Fade(Fade.OUT)).addTransition(new ChangeBounds()).addTransition(new Fade(Fade.IN));
// 设置过渡时间为500毫秒transition.setDuration(500);
// 应用过渡到Activity或Fragment的共享元素ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity1.this, img1, "shared element");
// 启动另一个ActivityIntent intent = new Intent(MainActivity1.this, MainActivity2.class);intent.putExtra("data_imgId", data.imgId);intent.putExtra("data_imgDes", data.imgDes);ActivityCompat.startActivity(MainActivity1.this, intent, options.toBundle());}
}
activity_main
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"tools:context=".MainActivity1"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/main1_rv"android:layout_width="match_parent"android:layout_height="match_parent" /></FrameLayout>
MainActivity2(主要是查看跳转过来的元素)
package com.example.animactivity;import android.annotation.SuppressLint;
import android.app.ActivityOptions;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Typeface;
import android.os.Bundle;
import android.transition.ChangeBounds;
import android.transition.Fade;
import android.transition.Slide;
import android.transition.TransitionSet;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;import java.util.ArrayList;public class MainActivity2 extends AppCompatActivity implements View.OnClickListener {private GestureDetector mGestureDetector;private ImageView img2;private TabLayout tabLayout;private ViewPager2 viewPager2;private AppBarLayout appBarLayout;private TabLayoutMediator mediator;private ArrayList<TestFragment> testFragments;private TextView head_tv;private ConstraintLayout layout_header;private int dataImgId;private String dataImgDes;@SuppressLint("MissingInflatedId")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Intent intent = getIntent();if (intent != null) {dataImgId = intent.getIntExtra("data_imgId", R.id.img1);dataImgDes = intent.getStringExtra("data_imgDes");}img2 = findViewById(R.id.img2);img2.setImageDrawable(getDrawable(dataImgId));img2.setOnClickListener(this);head_tv = findViewById(R.id.head_tv);head_tv.setText(dataImgDes);tabLayout = findViewById(R.id.tab_layout);viewPager2 = findViewById(R.id.view_pager);appBarLayout = findViewById(R.id.appBarLayout);layout_header = findViewById(R.id.layout_header);layout_header.setOnScrollChangeListener(new View.OnScrollChangeListener() {@Overridepublic void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {if (scrollY - oldScrollY > 100) {
// // 用户向下滑动
// jumpTo();Toast.makeText(MainActivity2.this, "下滑了", Toast.LENGTH_SHORT).show();jumpToNextActivity();}}});initViewPager();appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {@Overridepublic void onOffsetChanged(AppBarLayout appBarLayout, int i) {if (i == 0) {if (tabLayout.getVisibility() == View.VISIBLE) {tabLayout.setVisibility(View.GONE);appBarLayout.setLiftOnScrollTargetView(layout_header);}} else {if (tabLayout.getVisibility() == View.GONE) {tabLayout.setVisibility(View.VISIBLE);}}}});// 创建一个GestureDetector实例mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// 在这里处理下滑手势逻辑
// if (e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 200) {
// // 处理下滑手势
// Toast.makeText(MainActivity2.this, "下滑手势", Toast.LENGTH_SHORT).show();
// return true;
// }return false;}@Overridepublic boolean onScroll(@Nullable MotionEvent e1, @NonNull MotionEvent e2, float distanceX, float distanceY) {if (e2.getY() - e1.getY() > 100) {
// // 用户向下滑动
// jumpTo();jumpToNextActivity();return true;}return false;}});ActivityCompat.startPostponedEnterTransition(this);}private void initViewPager() {final String[] tabs = new String[]{"关注", "推荐", "最新0"};testFragments = new ArrayList<>();for (String tab : tabs) {testFragments.add(TestFragment.newInstance(tab));}//禁用预加载viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);//AdapterviewPager2.setAdapter(new FragmentStateAdapter(getSupportFragmentManager(), getLifecycle()) {@NonNull@Overridepublic Fragment createFragment(int position) {//FragmentStateAdapter内部自己会管理已实例化的fragment对象。// 所以不需要考虑复用的问题return testFragments.get(position);}@Overridepublic int getItemCount() {return testFragments.size();}});//viewPager 页面切换监听监听viewPager2.registerOnPageChangeCallback(changeCallback);mediator = new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {@Overridepublic void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {tab.setText(tabs[position]);}});//要执行这一句才是真正将两者绑定起来mediator.attach();}private int chosePosition = 0;private ViewPager2.OnPageChangeCallback changeCallback = new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageSelected(int position) {//可以来设置选中时tab的大小testFragments.get(position).setOnMyItemClickListener(new TestFragment.OnMyItemClickListener() {@Overridepublic void setItemPostion(String type, int position, Bean data) {chosePosition = position;head_tv.setText(type + "===" + data.imgDes);img2.setImageDrawable(getDrawable(data.imgId));}});}};private void jumpTo() {Intent intent = new Intent(MainActivity2.this, MainActivity3.class);
// ViewCompat.setTransitionName(img2, "shared element");ActivityOptionsCompat sharedElement = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity2.this, img2, "shared element");// TransOneActivity, 启动方法没变;startActivity(intent,sharedElement.toBundle());}private void jumpToNextActivity() {ArrayList<Bean> allData = testFragments.get(0).getAllData();allData.add(0, allData.get(chosePosition));// 创建一个TransitionSet,包含了Fade和ChangeBounds两种过渡效果TransitionSet transition = new TransitionSet().addTransition(new Fade(Fade.OUT)).addTransition(new ChangeBounds()).addTransition(new Fade(Fade.IN));
// 设置过渡时间为500毫秒transition.setDuration(500);
// 应用过渡到Activity或Fragment的共享元素ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity2.this, img2, "shared element");
// 启动另一个ActivityIntent intent = new Intent(MainActivity2.this, MainActivity3.class);intent.putExtra("all_data", allData);intent.putExtra("chose_position", chosePosition);ActivityCompat.startActivity(MainActivity2.this, intent, options.toBundle());}@Overrideprotected void onDestroy() {super.onDestroy();}@Overridepublic void onClick(View v) {if (v.getId() == R.id.img2) {jumpToNextActivity();}}
}
activity_main2
<?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"android:orientation="vertical"tools:context=".MainActivity2"><ImageViewandroid:id="@+id/img2"android:layout_width="match_parent"android:layout_height="300dp"android:scaleType="fitXY"android:src="@drawable/img2"android:transitionName="shared element"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><androidx.coordinatorlayout.widget.CoordinatorLayoutandroid:layout_width="match_parent"android:layout_height="0dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/img2"><com.google.android.material.appbar.AppBarLayoutandroid:id="@+id/appBarLayout"android:layout_width="match_parent"android:layout_height="wrap_content"><com.google.android.material.appbar.CollapsingToolbarLayoutandroid:id="@+id/collapsingToolbar"android:layout_width="match_parent"android:layout_height="match_parent"app:expandedTitleMarginEnd="0dp"app:expandedTitleMarginStart="0dp"app:expandedTitleMarginTop="?attr/actionBarSize"app:layout_scrollFlags="scroll|exitUntilCollapsed"><includeandroid:id="@+id/layout_header"layout="@layout/layout_header"app:layout_collapseMode="parallax" /></com.google.android.material.appbar.CollapsingToolbarLayout></com.google.android.material.appbar.AppBarLayout><androidx.viewpager2.widget.ViewPager2android:id="@+id/view_pager"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"app:layout_behavior="@string/appbar_scrolling_view_behavior" /></androidx.coordinatorlayout.widget.CoordinatorLayout><com.google.android.material.tabs.TabLayoutandroid:id="@+id/tab_layout"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:visibility="gone"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/img2"app:tabGravity="center"app:tabIndicatorColor="#ff678f"app:tabIndicatorFullWidth="false"app:tabIndicatorHeight="2dp"app:tabMode="scrollable"app:tabSelectedTextColor="#ff678f"app:tabTextColor="#333333"app:tabUnboundedRipple="true" />
</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.animactivity;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;import java.util.ArrayList;/*** @Description* @Author xudan* @CreateTime 2024/4/22*/
public class TestFragment extends Fragment implements OnItemClickListener {private View rootView;private RecyclerView rv;private MyAdapter myAdapter;private String fragment_type;public static TestFragment newInstance(String text) {Bundle args = new Bundle();args.putString("text", text);TestFragment fragment = new TestFragment();fragment.setArguments(args);return fragment;}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {fragment_type = getArguments().getString("text");rootView = inflater.inflate(R.layout.fragment_test, container, false);rv = rootView.findViewById(R.id.rv);rv.setLayoutManager(new LinearLayoutManager(getContext()));initData();myAdapter = new MyAdapter(getActivity(), R.layout.rv_layout_item, img_list);rv.setAdapter(myAdapter);myAdapter.setOnItemClickListener(this);return rootView;}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);TextView textView = rootView.findViewById(R.id.text_view);String text = getArguments() != null ? getArguments().getString("text") : null;textView.setText(text);}private ArrayList<Bean> img_list;private void initData() {img_list = new ArrayList<>();img_list.add(new Bean(R.drawable.img, "name0"));img_list.add(new Bean(R.drawable.img1, "name1"));img_list.add(new Bean(R.drawable.img2, "name2"));img_list.add(new Bean(R.drawable.img3, "name3"));img_list.add(new Bean(R.drawable.img4, "name4"));img_list.add(new Bean(R.drawable.img5, "name5"));img_list.add(new Bean(R.drawable.img6, "name6"));img_list.add(new Bean(R.drawable.img7, "name7"));img_list.add(new Bean(R.drawable.img8, "name8"));img_list.add(new Bean(R.drawable.img9, "name9"));img_list.add(new Bean(R.drawable.img10, "name10"));}@Overridepublic void onItemClick(@NonNull BaseQuickAdapter<?, ?> baseQuickAdapter, @NonNull View view, int i) {if (onMyItemClickListener != null) {onMyItemClickListener.setItemPostion(fragment_type, i, img_list.get(i));}}private OnMyItemClickListener onMyItemClickListener;public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener) {this.onMyItemClickListener = onMyItemClickListener;}public ArrayList<Bean> getAllData() {return img_list;}public interface OnMyItemClickListener {void setItemPostion(String type, int postion, Bean data);}
}
fragment_test
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"><TextViewandroid:id="@+id/text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:background="#DC9494"android:gravity="center"android:textSize="18sp" /><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="match_parent" />
</FrameLayout>
MainActivity3(实现类似于抖音效果的滑动)
package com.example.animactivity;import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;import java.util.ArrayList;public class MainActivity3 extends AppCompatActivity {private ViewPager2 main3_vp2;private ArrayList<Bean> list;private int chosePosition;@SuppressLint("MissingInflatedId")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main3);list = (ArrayList<Bean>) getIntent().getSerializableExtra("all_data");chosePosition = getIntent().getIntExtra("chose_position", 0);ActivityCompat.startPostponedEnterTransition(this);main3_vp2 = findViewById(R.id.main3_vp2);main3_vp2.setAdapter(new FragmentStateAdapter(this) {@NonNull@Overridepublic Fragment createFragment(int position) {return DetialFragment.newInstance(list.get(position));}@Overridepublic int getItemCount() {return list.size();}});main3_vp2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {super.onPageScrolled(position, positionOffset, positionOffsetPixels);}@Overridepublic void onPageSelected(int position) {super.onPageSelected(position);Toast.makeText(MainActivity3.this, "切换到第" + position + "个", Toast.LENGTH_SHORT).show();}@Overridepublic void onPageScrollStateChanged(int state) {super.onPageScrollStateChanged(state);}});}}
activity_main3
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".MainActivity3"><androidx.viewpager2.widget.ViewPager2android:id="@+id/main3_vp2"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" />
</FrameLayout>
关于上述:要点如下:
共享元素切换
private void jumpToNextActivity(ImageView img1, Bean data) {// 创建一个TransitionSet,包含了Fade和ChangeBounds两种过渡效果TransitionSet transition = new TransitionSet().addTransition(new Fade(Fade.OUT)).addTransition(new ChangeBounds()).addTransition(new Fade(Fade.IN));
// 设置过渡时间为500毫秒transition.setDuration(500);
// 应用过渡到Activity或Fragment的共享元素ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity1.this, img1, "shared element");
// 启动另一个ActivityIntent intent = new Intent(MainActivity1.this, MainActivity2.class);intent.putExtra("data_imgId", data.imgId);intent.putExtra("data_imgDes", data.imgDes);ActivityCompat.startActivity(MainActivity1.this, intent, options.toBundle());}
使用TabLayout+Viewpager时,注意页面切换监听监听
viewPager2.registerOnPageChangeCallback(changeCallback);mediator = new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {@Overridepublic void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {tab.setText(tabs[position]);}});//要执行这一句才是真正将两者绑定起来mediator.attach();
private ViewPager2.OnPageChangeCallback changeCallback = new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageSelected(int position) {//可以来设置选中时tab的大小testFragments.get(position).setOnMyItemClickListener(new TestFragment.OnMyItemClickListener() {@Overridepublic void setItemPostion(String type, int position, Bean data) {chosePosition = position;head_tv.setText(type + "===" + data.imgDes);img2.setImageDrawable(getDrawable(data.imgId));}});
单纯的梳理逻辑,所以demo中的图片加载没有做任何处理,有大图加载可能会导致oom,所以有针对的了解哈
相关文章:
需求记录(共享元素)
MainActivity1 列表展示,使用共享元素完成页面间的切换 package com.example.animactivity;import android.annotation.SuppressLint; import android.app.ActivityOptions; import android.content.Intent; import android.os.Build; import android.os.Bundle; i…...
.Net 使用 MongoDB
安装nuget包 MongoDB.Driver 简单代码 using MongoDB.Bson; using MongoDB.Driver; using System.Buffers; using System.Collections.Concurrent; using System.Diagnostics;namespace ConsoleApp4 {internal class Program{static void Main(string[] args){var client = ne…...
【TensorFlow深度学习】值函数估计:蒙特卡洛方法与TD学习
值函数估计:蒙特卡洛方法与TD学习 值函数估计:蒙特卡洛方法与TD学习的深度探索蒙特卡洛方法时序差分学习(TD)Python代码示例结论 值函数估计:蒙特卡洛方法与TD学习的深度探索 在强化学习的奇妙世界里,值函数估计扮演着至关重要的…...
成功解决ModuleNotFoundError: No module named ‘cv2’
成功解决ModuleNotFoundError: No module named ‘cv2’ 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓…...
中国蚁剑 安装教程 2024年5月
2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码(两个都要用到) github官方下载地址:https://github.com/AntSwordProject/ 参考文档:antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…...
Golang-分离式加载器(传参)AES加密
目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…...
速览三版HTTP的改进策略
HTTP(Hypertext Transfer Protocol)是互联网通信的基础协议,自从其第一个版本推出以来,经历了多个版本的改进,每个版本都针对之前的不足进行了优化和增强。以下是HTTP/1.1、HTTP/2和HTTP/3的主要改进总结: …...
window.open(“.html“,“_blank“) 执行是下载,并没有打开新窗口显示html
window.open() 方法在浏览器中打开一个新窗口或者新标签页。如果你的 .html 文件被下载而不是在新窗口中打开,那可能是因为服务器的响应头设置了 Content-Disposition: attachment,这会导致浏览器把响应的内容作为一个文件下载。 如果你有权限修改服务器…...
【QT5.14.2】编译MQTT库example的时候报No such file or directory
【QT5.14.2】编译MQTT库example的时候报No such file or directory 前几天导师让跑一下MQTT库,用的5.14.2版本的QT,于是就上网搜了一个教程:https://www.bilibili.com/video/BV1dH4y1e7hG/?spm_id_from333.337.search-card.all.click&v…...
【数据结构】前缀树(字典树)汇总
基础 {“a”,“abc”,“bac”,“bbc”,“ca” }的字典树如下图: 最主用的应用:一,字符串编码。二,位运算。 字符串编码 相比利用哈希映射编码,优点如下: 依次查询长度为n的字符串s的前缀时间复杂度是O(…...
Linux:基础开发工具
文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件安装扩展源 Linux 编辑器 vimvim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)底行模式(last line mode) vim的基本操作[命令模式]切换至[插入模式][插入模式]切换至[命令模…...
HarmonyOS NEXT Push接入
接入HarmonyOS NEXT Push 推送功能,相比于 Android 真的是简单太多。不再需要适配接入各个厂家的推送 SDK,真是舒服。 1.开通推送服务与配置Client ID 1.1 创建应用获取Client ID 按照官方文档来就可以了:https://developer.huawei.com/co…...
如何快速入门Element-UI:打造高效美观的前端界面
Element-UI 是一款基于 Vue.js 的开源组件库,提供了丰富的 UI 组件,可以帮助开发者快速构建美观、响应式的前端界面。本文将详细介绍如何快速入门 Element-UI,包括环境搭建、组件使用、样式定制及常见问题解决方法,帮助你高效地使用 Element-UI 进行前端开发。 一、环境搭…...
Langchain的向量存储 - Document示例代码里的疑问
文章目录 前言一、语句分析二、 举例解释三、 完整代码总结 前言 之前的代码里有下面这句话,可能有看不明白的读者。 vectors [embeddings.embed(doc.page_content) for doc in docs]今天一起来看下这句话。 一、语句分析 这句话实际上是一个列表推导式&#x…...
Docker 教程-介绍-2
快速了解docker有什么。 Docker简介 Docker 是一个开源的应用容器引擎,基于Go语言开发,并遵循Apache 2.0协议。它允许开发者将应用及其依赖包打包进一个可移植的容器中,这些容器可以发布到任何支持Docker的Linux或Windows机器上,…...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 伐木工(200分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 伐木工(200分) 🌍 评测功能需要订阅专栏后私信联系清隆解…...
UltraScale+系列模块化仪器,可以同时用作控制器、算法加速器和高速数字信号处理器
基于 XCZU7EG / XCZU4EG / XCZU2EG • 灵活的模块组合 • 易于嵌入的紧凑型外观结构 • 高性能的 ARM Cortex 处理器 • 成熟的 FPGA 可编程逻辑 ,基于 IP 核的软件库 基于 Xilinx Zynq UltraScaleMPSoC 的 FPGA 技术,采用 Xilinx Zynq UltraScale&a…...
Python与其他编程语言(如Java、C++)相比有哪些优势?
一、技术难点 在探讨Python与其他编程语言相比的优势时,技术难点在于如何全面、准确地把握并阐述这些优势。这需要对Python、Java、C等编程语言有深入的理解,包括它们的语法特性、应用领域、性能特点、开发效率等。 首先,Python的语法简洁明…...
Edge浏览器双击关闭标签页,双击关闭浏览器选项卡
设置》外观》自定义浏览器,开启“使用双击关闭浏览器选项卡” 设置里面搜索“双击”,这是最快的方式 鼠标滚轮单击 或者进入“设置”-“辅助功能” 呼吁已久的功能来了!Edge浏览器双击关闭标签页功能上线新 国产浏览器大多都有双击关闭标签页…...
C++ 贪心算法——跳跃游戏、划分字母区间
一:跳跃游戏 55. 跳跃游戏 题目描述:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ࿱…...
汽车数据应用构想(三)
上期说的,用数据去拟合停车信息的应用,那么类似的POI信息相关的场景其实都可以实现。今天讲讲用户使用频率也很高的加油/充电场景。 实际应用中,在加油场景中用户关心的通常还是价格。无论是导航还是各种加油APP/小程序,都已经很…...
体素技术在AI绘画中的革新作用
随着人工智能技术的不断进步,AI绘画已经成为艺术创作和视觉设计领域的一大趋势。在众多推动AI绘画发展的技术中,体素技术以其独特的优势,正在逐渐改变着我们对计算机生成图像的认识。本文旨在探讨体素技术在AI绘画中的应用与影响,…...
Leetcode.866 回文质数
题目链接 Leetcode.866 回文质数 rating : 1938 题目描述 给你一个整数 n n n ,返回大于或等于 n n n 的最小 回文质数。 一个整数如果恰好有两个除数: 1 1 1 和它本身,那么它是 质数 。注意, 1 1 1 不是质数。 例如…...
【论文阅读】Point2RBox (CVPR’2024)
paper:https://arxiv.org/abs/2311.14758 code:https://github.com/yuyi1005/point2rbox-mmrotate...
深度学习的点云分割
深度学习的点云分割 点云分割是计算机视觉中的一个重要任务,特别是在三维数据处理和分析中。点云数据是由大量三维点构成的集合,每个点包含空间坐标(x, y, z),有时还包含其他信息如颜色和法向量。点云分割的目标是将点…...
【知识点】c++模板特化
在 C 中,模板特化分为全特化(full specialization)和偏特化(partial specialization)。它们允许程序员为特定类型或类型模式提供不同的实现,以覆盖通用模板的默认行为。 模板全特化 模板全特化是指为某个…...
算法家族之一——二分法
目录 算法算法的打印效果如果算法里的整型“i”为1如果算法里的整型“i”为11 算法的流程图算法的实际应用总结 大家好,我叫 这是我58,现在,请看下面的算法。 算法 #define _CRT_SECURE_NO_WARNINGS 1//<--预处理指令 #include <stdi…...
【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment
论文:https://arxiv.org/abs/2404.16022 代码:https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…...
Elastic 8.14:用于简化分析的 Elasticsearch 查询语言 (ES|QL) 正式发布
作者:来自 Elastic Brian Bergholm 今天,我们很高兴地宣布 Elastic 8.14 正式发布。 什么是新的? 8.14 版本最重要的标题是 ES|QL 的正式发布(GA),它是从头开始设计和专门构建的,可大大简化数据调查。在新的查询引擎的…...
C语言指针与数组的区别
在C语言中,指针和数组虽然在很多情况下可以互换使用,但它们在概念上和行为上存在一些区别。下面详细解释这些区别: ### 数组 1. **固定大小**:数组在声明时必须指定大小,这个大小在编译时确定,之后不能改…...
外贸主动营销网站建设/app推广营销
/*** 1、除非元素为null,否则向集合添加元素*/ CollectionUtils.addIgnoreNull(personList,null); /*** 2、将两个已排序的集合a和b合并为一个已排序的列表,以便保留元素的自然顺序*/ CollectionUtils.collate(Iterable<? extends O> a, Iterable…...
怎么看一个网站是用什么程序做的/厦门关键词优化平台
第2章 Java应用程序介绍2.1 作业检查单2.2 实验前任务2.3 实验练习2.4 实验后任务第3章 Java applet 介绍3.1 作业检查单3.2 实验前任务3.3 实验练习3.4 实验后任务第4章 控制结构(一)4.1 作业检查单4.2 实验前任务4.3 实验练习4.4 实验后任务第2章 Java应用程序介绍2.1 作业检…...
b2c网站有哪些/seo点击器
这次西安赛,,额,,, 周六: 考完四级去流亭坐飞机,下了飞机又做了三个小时的车 到了酒店,告诉我们下午六点没来的自动取消预定,现在一间房间都没了?…...
能自己做效果图的网站/seo工程师
链接...
企业培训师资格证报考2023/杭州网站优化流程
ContentProvider是Android四大组件之一,所以如果是自己实现ContentProvider,需要在AndroidManifest.xml文件中进行声明,幸运的是,我们很少需要自己定义实现它,一般我们的开发只需要用到系统自己提供的ContentProvider&…...
鞍山信息港官网/廊坊网络推广优化公司
实现的功能: 1.幻灯片自动播放 2.当幻灯片更换时对应的图片数字也变化,点击数字显示对应的图片 3.当点击上一张下一张显示对应的幻灯片 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title&…...