199.m1-ListView的优化

本文介绍了一种自定义ListView的方法,通过创建BaseListView类优化默认ListView的视觉效果,并展示了如何在AppFragment中使用自定义ListView加载AppInfo数据并响应点击事件。

点击ListView的时候,条目的背景颜色等等都会影响视觉效果,现在对ListView优化,创建一个自定义的ListView使用的时候直接使用自定义的ListView。

package com.ldw.market.view;

import com.ldw.market.R;
import com.ldw.market.utils.UiUtils;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

/*
 * 自定义ListView的方法,初始化ListView的时候会初始化这些方法
 */
public class BaseListView extends ListView {
	
	public BaseListView(Context context) {
		super(context);
		init();
	}

	public BaseListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	public BaseListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	private void init() {
//		setSelector  点击显示的颜色
//		setCacheColorHint  拖拽的颜色
//		setDivider  每个条目的间隔	的分割线	
		this.setSelector(R.drawable.nothing);  // 什么都没有
		this.setCacheColorHint(R.drawable.nothing);
		this.setDivider(UiUtils.getDrawalbe(R.drawable.nothing));
	}

}
UiUtils.java
	public static Drawable getDrawalbe(int id) {
		return getResource().getDrawable(id);
	}

HomeFragment.java使用自定义的控件

package com.ldw.market.fragment;

import java.util.List;

import android.content.Intent;
import android.text.format.Formatter;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

import com.ldw.market.DetailActivity;
import com.ldw.market.R;
import com.ldw.market.Adapter.DefaultAdapter;
import com.ldw.market.domain.AppInfo;
import com.ldw.market.holder.BaseHolder;
import com.ldw.market.http.HttpHelper;
import com.ldw.market.protocol.AppProtocol;
import com.ldw.market.protocol.GameProtocol;
import com.ldw.market.utils.UiUtils;
import com.ldw.market.view.BaseListView;
import com.ldw.market.view.LoadingPage.LoadResult;
import com.lidroid.xutils.bitmap.PauseOnScrollListener;

public class AppFragment extends BaseFragment1 {

	List<AppInfo> datas;
	
	//加载成功,显示ListView
	@Override
	public View createSuccessView() {
		BaseListView  listView=new BaseListView(UiUtils.getContext());
		listView.setAdapter(new AppAdapter(datas, listView));
		// 第二个参数 慢慢滑动的时候是否加载图片 false  加载   true 不加载
		//  第三个参数  飞速滑动的时候是否加载图片  true 不加载 
		listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
		bitmapUtils.configDefaultLoadingImage(R.drawable.ic_default);  // 设置如果图片加载中显示的图片
        bitmapUtils.configDefaultLoadFailedImage(R.drawable.ic_default);// 加载失败显示的图片
		return listView;
	}
	
	public class AppAdapter extends DefaultAdapter<AppInfo>{

		public AppAdapter(List<AppInfo> datas, ListView lv) {
			super(datas, lv);
			// TODO Auto-generated constructor stub
		}

		@Override
		protected BaseHolder<AppInfo> getHolder() {
			return new ViewHolder();
		}

		//加载更多数据下拉条的实现
		@Override
		protected List<AppInfo> onload() {
			AppProtocol protocol = new AppProtocol();
			List<AppInfo> data = protocol.load(datas.size());
			datas.addAll(data);
			return data;
		}
		
		/**在该方法去处理条目的点击事件*/
		@Override
		public void onInnerItemClick(int position) {
			Toast.makeText(UiUtils.getContext(), "position:"+position, 0).show();
			super.onInnerItemClick(position);
			AppInfo appInfo = datas.get(position);
			//点击以后跳转到详情页
			Intent intent = new Intent(UiUtils.getContext(), DetailActivity.class);
			//携带参数,点击的是哪一个应用,把包名传递过去
			intent.putExtra("packageName", appInfo.getPackageName());
			startActivity(intent);
			
		}
		
	}
	
	static class ViewHolder extends BaseHolder<AppInfo>{
		ImageView item_icon;
		TextView item_title,item_size,item_bottom;
		RatingBar item_rating;

		
		//更新界面
		@Override
		public void refreshView(AppInfo data){
			this.item_title.setText(data.getName());// 设置应用程序的名字
			String size = Formatter.formatFileSize(UiUtils.getContext(), data.getSize());
			this.item_size.setText(size);
			this.item_bottom.setText(data.getDes());
			float stars = data.getStars();
			this.item_rating.setRating(stars); // 设置ratingBar的值
			String iconUrl = data.getIconUrl(); //这个地址不全,需要加上apache地址"iconUrl": "app/com.youyuan.yyhl/icon.jpg",
			//http://127.0.0.1:8090/image?name=app/com.youyuan.yyhl/icon.jpg
			
			
			//第一个参数是显示图片的控件,第二个参数是显示图片的url
			bitmapUtils.display(this.item_icon, HttpHelper.URL+"image?name="+iconUrl);
			// 显示图片的控件
			//bitmapUtils.display(holder.item_icon, HttpHelper.URL+"image?name="+iconUrl);
		}

		@Override
		public View initView() {
			View contentView = View.inflate(UiUtils.getContext(), R.layout.item_app, null);
			this.item_icon = (ImageView) contentView.findViewById(R.id.item_icon);
			this.item_title = (TextView) contentView.findViewById(R.id.item_title);
			this.item_size = (TextView) contentView.findViewById(R.id.item_size);
			this.item_bottom = (TextView) contentView.findViewById(R.id.item_bottom);
			this.item_rating = (RatingBar) contentView.findViewById(R.id.item_rating);
			return contentView;
		}

	}

	/*
	 * 请求服务器获取服务器的数据(non-Javadoc)
	 * @see com.ldw.market.fragment.BaseFragment#load()
	 */
	@Override
	protected LoadResult load() {
		AppProtocol protocol = new AppProtocol();
		datas = protocol.load(0);
		return checkData(datas);
	}

}


package com.XiaoLian; import adrt.ADRTLogCatReader; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.Process; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.XiaoLian.IPCCond.AIDLConnection; import com.XiaoLian.IPCCond.IPCService; import com.XiaoLian.ToolClass.FloatTool; import com.XiaoLian.ToolClass.SPUtils; import com.XiaoLian.ToolClass.fileUtil; import com.topjohnwu.superuser.ipc.RootService; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /* loaded from: classes.dex */ public class MainActivity extends Activity { private static MyAdapter adapter; static AlertDialog alertDialogs; static AlertDialog alertDialogs1; private static AlertDialog alertDialogss; public static Context context; private static AlertDialog dialog; static AlertDialog.Builder dialogs; static AlertDialog.Builder dialogs1; public static Context getContext; static LinearLayout linearLayouts; private static List<Map<String, Object>> list; private static ListView listView; private static Activity m_activity; private static TextView prog_text; private static ProgressBar progressBar; /* renamed from: 倒计时 reason: contains not printable characters */ private static TextView f0; /* renamed from: 窗口 reason: contains not printable characters */ private static View f3; /* renamed from: 读 reason: contains not printable characters */ private static EditText f4; private AlertDialog dialogsShow; private Handler handler = new Handler(this) { // from class: com.XiaoLian.MainActivity.100000009 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000009 r4) { return r4.this$0; } @Override // android.os.Handler public void handleMessage(Message message) { super.handleMessage(message); MainActivity.time--; MainActivity.f0.setText(new StringBuffer().append(new StringBuffer().append("倒计时 ").append(MainActivity.time).toString()).append(" 秒").toString()); if (MainActivity.time == 0) { MainActivity.dialog.dismiss(); this.this$0.handler.removeMessages(0); } this.this$0.handler.sendEmptyMessageDelayed(0, (long) 1000); } }; public Intent intent; /* renamed from: 卡密 reason: contains not printable characters */ private String f5; /* renamed from: 卡密内容 reason: contains not printable characters */ private String f6; static String wy_url = "https://wy.llua.cn"; static String WY_APPID = "61456"; static String WY_APPKEY = "tJY6OZR4KQ2PlwM9RWKPRh"; static String WY_RC4KEY = "lwM9RWKPRhGtJY6OZR4KQ2P"; /* renamed from: 当前版本号 reason: contains not printable characters */ static String f1 = "1.0"; /* renamed from: 登录判断 reason: contains not printable characters */ static boolean f2 = false; private static boolean init_win = false; private static int time = 1; public static boolean app_init_mode = false; public static boolean app_Operation_mode_root = false; @Override // android.app.Activity protected void onCreate(Bundle bundle) { ADRTLogCatReader.onContext(this, "com.aide.ui"); super.onCreate(bundle); requestWindowFeature(1); if (Build.VERSION.SDK_INT >= 23) { getWindow().getDecorView().setSystemUiVisibility(8192); } getWindow().setStatusBarColor(Color.parseColor("#E1F0F0F0")); requestPermission(); m1(); m_activity = this; getContext = this; SelectModeBox(this); } /* renamed from: 读取文件 reason: contains not printable characters */ public static String m0(String str) { String str2 = ""; try { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(str)), "UTF-8")); String str3 = null; while (true) { String readLine = bufferedReader.readLine(); if (readLine == null) { break; } str2 = new StringBuffer().append(str2).append(readLine).toString(); } } catch (Exception e) { e.printStackTrace(); } return str2; } /* renamed from: 储存权限 reason: contains not printable characters */ public void m1() { boolean z = true; if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") != 0) { z = false; } if (checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE") != 0) { z = false; } if (!z) { requestPermissions(new String[]{"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"}, 102); } } } private void initMain() { f3.findViewById(R.id.go_app).setVisibility(8); loadDeploy(new Object[][]{new Object[]{"ROOT权限", new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000002 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000002 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { if (MainActivity.app_Operation_mode_root && !Util.isRoot()) { new Handler(Looper.getMainLooper()).post(new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000002.100000001 private final AnonymousClass100000002 this$0; { this.this$0 = r6; } static AnonymousClass100000002 access$0(AnonymousClass100000001 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { AlertDialog.Builder builder = new AlertDialog.Builder(AnonymousClass100000002.access$0(this.this$0)); builder.setTitle("提示"); builder.setMessage("无法获取ROOT权限,请检查您的设备是否已ROOT?"); builder.setCancelable(false); builder.setPositiveButton("确定", new DialogInterface.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000002.100000001.100000000 private final AnonymousClass100000001 this$0; { this.this$0 = r6; } static AnonymousClass100000001 access$0(AnonymousClass100000000 r4) { return r4.this$0; } @Override // android.content.DialogInterface.OnClickListener public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); Process.killProcess(Process.myPid()); System.exit(0); } }); AlertDialog create = builder.create(); create.getWindow().setType(2038); create.show(); } }); try { Thread.sleep((long) 999999999); } catch (InterruptedException e) { e.printStackTrace(); } } } }}, new Object[]{"悬浮窗权限", new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000003 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000003 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { for (int i = 0; i < 5 && !Settings.canDrawOverlays(this.this$0); i++) { Util.runShell(new StringBuffer().append(new StringBuffer().append("appops set --uid ").append(this.this$0.getPackageName()).toString()).append(" android:system_alert_window allow").toString(), true); try { Thread.sleep((long) 250); } catch (InterruptedException e) { e.printStackTrace(); } } if (!Settings.canDrawOverlays(this.this$0)) { this.this$0.startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(this.this$0.getPackageName()).toString())), 4444); } while (!Settings.canDrawOverlays(this.this$0)) { try { Thread.sleep((long) 750); } catch (InterruptedException e2) { e2.printStackTrace(); } } } }}, new Object[]{"连接服务", new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000005 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000005 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { while (!IPCService.isConnect() && MainActivity.app_Operation_mode_root) { try { Thread.sleep((long) 1000); } catch (InterruptedException e) { e.printStackTrace(); } } this.this$0.runOnUiThread(new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000005.100000004 private final AnonymousClass100000005 this$0; { this.this$0 = r6; } static AnonymousClass100000005 access$0(AnonymousClass100000004 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { AnonymousClass100000005.access$0(this.this$0).handler.sendEmptyMessageDelayed(0, (long) 1000); MainActivity.f3.findViewById(R.id.go_app).setVisibility(0); } }); } }}}); } private void loadDeploy(Object[][] objArr) { new Thread(new Runnable(this, objArr) { // from class: com.XiaoLian.MainActivity.100000008 private final MainActivity this$0; private final Object[][] val$funs; { this.this$0 = r7; this.val$funs = r8; } static MainActivity access$0(AnonymousClass100000008 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { MainActivity.progressBar.setMax(this.val$funs.length); for (int i = 0; i < this.val$funs.length; i++) { HashMap hashMap = new HashMap(); this.this$0.runOnUiThread(new Runnable(this, i, this.val$funs, hashMap) { // from class: com.XiaoLian.MainActivity.100000008.100000006 private final AnonymousClass100000008 this$0; private final int val$finalI; private final Object[][] val$funs; private final HashMap val$map; { this.this$0 = r9; this.val$finalI = r10; this.val$funs = r11; this.val$map = r12; } static AnonymousClass100000008 access$0(AnonymousClass100000006 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { MainActivity.prog_text.setText(String.format("(%d/%d)", new Integer(this.val$finalI + 1), new Integer(this.val$funs.length))); this.val$map.put("msg", this.val$funs[this.val$finalI][0].toString()); this.val$map.put("success", new Boolean(false)); MainActivity.list.add(this.val$map); MainActivity.adapter.notifyDataSetChanged(); } }); ((Runnable) this.val$funs[i][1]).run(); this.this$0.runOnUiThread(new Runnable(this, hashMap, i) { // from class: com.XiaoLian.MainActivity.100000008.100000007 private final AnonymousClass100000008 this$0; private final int val$finalI; private final HashMap val$map; { this.this$0 = r8; this.val$map = r9; this.val$finalI = r10; } static AnonymousClass100000008 access$0(AnonymousClass100000007 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { this.val$map.replace("success", new Boolean(true)); MainActivity.adapter.notifyDataSetChanged(); MainActivity.listView.setSelection(MainActivity.listView.getBottom()); MainActivity.progressBar.setProgress(this.val$finalI + 1); } }); } } }).start(); } /* access modifiers changed from: package-private */ /* loaded from: classes.dex */ public class MyAdapter extends BaseAdapter { private List<Map<String, Object>> list; private LayoutInflater mInflater; private final MainActivity this$0; static MainActivity access$0(MyAdapter myAdapter) { return myAdapter.this$0; } public MyAdapter(MainActivity mainActivity, Context context, List<Map<String, Object>> list) { this.this$0 = mainActivity; this.mInflater = LayoutInflater.from(context); this.list = list; } @Override // android.widget.Adapter public int getCount() { return this.list.size(); } @Override // android.widget.Adapter public Object getItem(int i) { return this.list.get(i); } @Override // android.widget.Adapter public long getItemId(int i) { return (long) i; } @Override // android.widget.Adapter public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder; View view2 = view; if (view2 == null) { viewHolder = new ViewHolder(this); view2 = this.mInflater.inflate(R.layout.layout_main_item, (ViewGroup) null); viewHolder.msg = (TextView) view2.findViewById(R.id.main_item_msg); viewHolder.success = (ImageView) view2.findViewById(R.id.main_item_success); viewHolder.progressBar = (ProgressBar) view2.findViewById(R.id.progressBar2); view2.setTag(viewHolder); } else { viewHolder = (ViewHolder) view2.getTag(); } viewHolder.msg.setText((String) this.list.get(i).get("msg")); boolean booleanValue = ((Boolean) this.list.get(i).get("success")).booleanValue(); viewHolder.success.setVisibility(booleanValue ? 0 : 8); viewHolder.progressBar.setVisibility(booleanValue ? 8 : 0); return view2; } /* loaded from: classes.dex */ public final class ViewHolder { public TextView msg; public ProgressBar progressBar; public ImageView success; private final MyAdapter this$0; static MyAdapter access$0(ViewHolder viewHolder) { return viewHolder.this$0; } public ViewHolder(MyAdapter myAdapter) { this.this$0 = myAdapter; } } } /* access modifiers changed from: private */ public void ActivityMain() { if (app_Operation_mode_root) { try { RootService.bind(new Intent(this, Class.forName("com.XiaoLian.IPCCond.SuperMain")), new AIDLConnection(false)); if (!Settings.canDrawOverlays(m_activity)) { FloatTool.RunShell(new StringBuffer().append(new StringBuffer().append("appops set --uid ").append(m_activity.getPackageName()).toString()).append(" android:system_alert_window allow").toString(), true); } } catch (ClassNotFoundException e) { throw new NoClassDefFoundError(e.getMessage()); } } else { System.loadLibrary("main"); RequestPermission(); } app_init_mode = true; SPUtils.setParam(getApplicationContext(), "app_init_mode", new Boolean(app_init_mode)); SPUtils.setParam(getApplicationContext(), "app_Operation_mode_root", new Boolean(app_Operation_mode_root)); setContentView(R.layout.main_mocn); f3 = LayoutInflater.from(this).inflate(R.layout.activity_main, (ViewGroup) null); listView = (ListView) f3.findViewById(R.id.list_start_info); progressBar = (ProgressBar) f3.findViewById(R.id.progressBar); prog_text = (TextView) f3.findViewById(R.id.prog_text); f0 = (TextView) f3.findViewById(R.id.go_app); if (!Settings.canDrawOverlays(this)) { startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(getPackageName()).toString())), 4444); } f4 = (EditText) findViewById(R.id.f7); f4.setText(fileUtil.readFile("/storage/emulated/0/Kami")); findViewById(R.id.f8).setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000010 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000010 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.startActivity(new Intent("android.intent.action.VIEW", Uri.parse("http://llua.cn/?mod=cardcheck&id=74075"))); } }); findViewById(R.id.kaiqi).setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000011 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000011 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.f5 = MainActivity.f4.getText().toString(); if (this.this$0.f5.length() == 0) { StartGame.showFloatWindow(this.this$0); Toast.makeText(this.this$0, "Holle", 0).show(); } } }); ((Button) findViewById(R.id.reset_im)).setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000012 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000012 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { SPUtils.setParam(this.this$0.getApplicationContext(), "app_init_mode", new Boolean(false)); System.exit(0); } }); list = new ArrayList(); adapter = new MyAdapter(this, this, list); listView.setAdapter((ListAdapter) adapter); dialog = new AlertDialog.Builder(this).setView(f3).setCancelable(false).create(); if (app_Operation_mode_root) { dialog.show(); initMain(); } } private void SelectModeBox(Activity activity) { app_Operation_mode_root = ((Boolean) SPUtils.getParam(getApplicationContext(), "app_Operation_mode_root", new Boolean(false))).booleanValue(); app_init_mode = ((Boolean) SPUtils.getParam(getApplicationContext(), "app_init_mode", new Boolean(false))).booleanValue(); if (!app_init_mode) { linearLayouts = new LinearLayout(this); linearLayouts.setOrientation(1); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(-1, -1); int dp2px = dp2px(this, (float) 24); linearLayouts.setPadding(dp2px, dp2px, dp2px, dp2px); linearLayouts.setLayoutParams(layoutParams); TextView textView = new TextView(this); textView.setTextColor(-16777216); textView.setLayoutParams(new LinearLayout.LayoutParams(-2, -2)); textView.setText("运行环境"); textView.setTextSize(19.0f); textView.setGravity(17); LinearLayout.LayoutParams layoutParams2 = (LinearLayout.LayoutParams) textView.getLayoutParams(); ((ViewGroup.MarginLayoutParams) layoutParams2).bottomMargin = dp2px(this, (float) 30); textView.setLayoutParams(layoutParams2); Button button = new Button(this); button.setText("ROOT"); button.setTextSize(14.0f); button.setTextColor(-1); button.setBackgroundColor(Color.parseColor("#1E88E5")); button.setLayoutParams(new LinearLayout.LayoutParams(-1, dp2px(this, (float) 45))); ((ViewGroup.MarginLayoutParams) ((LinearLayout.LayoutParams) button.getLayoutParams())).topMargin = dp2px(this, (float) 10); button.setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000013 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000013 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.dialogsShow.dismiss(); System.out.println("ROOT"); MainActivity.app_Operation_mode_root = true; this.this$0.ActivityMain(); } }); Button button2 = new Button(this); button2.setText("框架"); button2.setTextSize(14.0f); button2.setTextColor(-1); button2.setBackgroundColor(Color.parseColor("#1E88E5")); button2.setLayoutParams(new LinearLayout.LayoutParams(-1, dp2px(this, (float) 45))); ((ViewGroup.MarginLayoutParams) ((LinearLayout.LayoutParams) button2.getLayoutParams())).topMargin = dp2px(this, (float) 15); button2.setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000014 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000014 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.dialogsShow.dismiss(); System.out.println("框架"); MainActivity.app_Operation_mode_root = false; this.this$0.ActivityMain(); } }); linearLayouts.addView(textView); linearLayouts.addView(button); linearLayouts.addView(button2); dialogs = new AlertDialog.Builder(this); dialogs.setCancelable(false); dialogs.setView(linearLayouts); this.dialogsShow = dialogs.show(); if (this.dialogsShow.getWindow() != null) { WindowManager.LayoutParams attributes = this.dialogsShow.getWindow().getAttributes(); ((ViewGroup.LayoutParams) attributes).width = dp2px(this, (float) 260); this.dialogsShow.getWindow().setAttributes(attributes); this.dialogsShow.getWindow().setBackgroundDrawableResource(17170443); return; } return; } ActivityMain(); } private int dp2px(Context context2, float f) { return (int) ((f * context2.getResources().getDisplayMetrics().density) + 0.5f); } private void RequestPermission() { if (!Settings.canDrawOverlays(this)) { startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(getPackageName()).toString())), 4444); } } public void requestPermission() { boolean z = true; if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") != 0) { z = false; } if (checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE") != 0) { z = false; } if (checkSelfPermission("android.permission.RECORD_AUDIO") != 0) { z = false; } if (checkSelfPermission("android.permission.RESTART_PACKAGES") != 0) { z = false; } if (checkSelfPermission("android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND") != 0) { z = false; } if (checkSelfPermission("android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS") != 0) { z = false; } if (checkSelfPermission("android.permission.SYSTEM_ALERT_WINDOW") != 0) { z = false; } if (!z) { requestPermissions(new String[]{"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.RECORD_AUDIO", "android.permission.RESTART_PACKAGES", "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND", "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", "android.permission.SYSTEM_ALERT_WINDOW", "android.permission.WRITE_EXTERNAL_STORAGE"}, 102); } } if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(this)) { startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(getPackageName()).toString())), 111); } } } 讲解一下这段代码,这个app有什么功能?
10-29
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值