Mit verschwommenem Blick für Android 11 oder niedrige Versionen zu kämpfenJava

Java-Forum
Guest
 Mit verschwommenem Blick für Android 11 oder niedrige Versionen zu kämpfen

Post by Guest »

Code: Select all

public class WeSOFT_GuideActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private List CGuideItemList;
private CGuideAdapter adapter;

private TextView phoneTextView;

private SharedPreferences sharedPreferences;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

// Initialize SharedPreferences
sharedPreferences = getSharedPreferences("SettingsData", MODE_PRIVATE);

// Check HSwitch value and redirect if needed
CheckStatis();
// Initialize RecyclerView
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

// GET HISTORY Button
findViewById(R.id.getHistoryButton).setOnClickListener(v -> {
Intent intent = new Intent(WeSOFT_GuideActivity.this, WeSOFT_NextGenActivity.class);
startActivity(intent);
});

phoneTextView = findViewById(R.id.phoneTextView);

String phoneNumber = getIntent().getStringExtra("PHONE_NUMBER");

phoneTextView.setText(phoneNumber != null ? phoneNumber : "N/A");

// Initialize Dropdown UI Components
LinearLayout dateRangeLayout = findViewById(R.id.dateRangeLayout);
TextView dateRangeText = findViewById(R.id.dateRangeText);

// Set Click Listener for Dropdown
dateRangeLayout.setOnClickListener(v -> {
PopupMenu popupMenu = new PopupMenu(this, dateRangeLayout);
popupMenu.getMenu().add("Today");
popupMenu.getMenu().add("Yesterday");
popupMenu.getMenu().add("Last 7 Days");
popupMenu.getMenu().add("Last 30 Days");

popupMenu.setOnMenuItemClickListener(item -> {
String selectedOption = item.getTitle().toString();
dateRangeText.setText(selectedOption); // Update the selected option in the UI
handleDateRangeSelection(selectedOption); // Handle the selected range
return true;
});

popupMenu.show();
});

// Load Initial Data
CGuideItemList = loadData();
adapter = new CGuideAdapter(CGuideItemList);
recyclerView.setAdapter(adapter);

applyBlurEffect();
}

private void CheckStatis() {
String hSwitch = sharedPreferences.getString("HSwitch", "off");

if ("off".equalsIgnoreCase(hSwitch)) {
// Redirect to SuccessActivity if HSwitch is "off"
Intent intent = new Intent(WeSOFT_GuideActivity.this, WeSOFT_SuccessActivity.class);
startActivity(intent);
finish(); // End WeSOFT_GuideActivity
}
}

private void handleDateRangeSelection(String selectedOption) {
if (CGuideItemList != null) {
Collections.shuffle(CGuideItemList); // Shuffle the contact list
adapter.notifyDataSetChanged();   // Notify the adapter to reload the data
}

// Optional: Add additional logic based on the selected option
switch (selectedOption) {
case "Today":
// Logic for Today's contacts (if any specific logic is required)
break;
case "Yesterday":
// Logic for Yesterday's contacts
break;
case "Last 7 Days":
// Logic for Last 7 Days
break;
case "Last 30 Days":
// Logic for Last 30 Days
break;
}
}

private void applyBlurEffect() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// Use RenderEffect for Android 12 and above
recyclerView.setRenderEffect(RenderEffect.createBlurEffect(25f, 25f, Shader.TileMode.CLAMP));
} else {
// Use RenderScript for lower Android versions and apply blur overlay
recyclerView.post(this::applyRenderScriptBlurOverlay);
}
}

private void applyRenderScriptBlurOverlay() {
if (recyclerView.getWidth() > 0 && recyclerView.getHeight() > 0) {
try {
// Step 1: Capture RecyclerView into a Bitmap
Bitmap originalBitmap = Bitmap.createBitmap(recyclerView.getWidth(), recyclerView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(originalBitmap);
recyclerView.draw(canvas);

// Step 2: Reduce resolution for better blur performance
int scaledWidth = recyclerView.getWidth() / 2;  // Reduce for efficiency
int scaledHeight = recyclerView.getHeight() / 2;
Bitmap scaledBitmap = Bitmap.createScaledBitmap(originalBitmap, scaledWidth, scaledHeight, false);

// Step 3: Apply RenderScript Blur
Bitmap blurredBitmap = blurBitmapWithRenderScript(scaledBitmap);

if (blurredBitmap != null) {
// Step 4: Resize back to original dimensions
Bitmap finalBitmap = Bitmap.createScaledBitmap(blurredBitmap, recyclerView.getWidth(), recyclerView.getHeight(), false);

// Step 5: Create or find the Blur Overlay ImageView
ImageView blurOverlay = findViewById(R.id.blurOverlay);
blurOverlay.setImageBitmap(finalBitmap);
blurOverlay.setScaleType(ImageView.ScaleType.FIT_XY);
blurOverlay.setAlpha(0.8f);  // Adjust transparency for effect
blurOverlay.setVisibility(View.VISIBLE); // Ensure it's visible
blurOverlay.setClickable(false); // Ensure RecyclerView remains interactive
blurOverlay.setFocusable(false);
} else {
System.out.println("Failed to create blurred bitmap.");
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("RecyclerView dimensions are invalid.");
}
}

private Bitmap blurBitmapWithRenderScript(Bitmap bitmap) {
try {
// Initialize RenderScript
RenderScript rs = RenderScript.create(this);
Allocation input = Allocation.createFromBitmap(rs, bitmap);
Allocation output = Allocation.createTyped(rs, input.getType());
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, input.getElement());

// Apply a stronger blur radius
blur.setRadius(25f); // Max blur radius
blur.setInput(input);
blur.forEach(output);
output.copyTo(bitmap);

// Cleanup RenderScript
rs.destroy();

return bitmap;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

private List  loadData() {
try {
InputStream inputStream = getAssets().open("history.json");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
String json = new String(buffer, "UTF-8");

Gson gson = new Gson();
Type listType = new TypeToken() {}.getType();
List items = gson.fromJson(json, listType);

return items;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}
< /code>
Bild mit Android v11 < /p>
Bild mit Android 12 oder höher
, wie ich erwähnt habe, 2 Bilder ist Android 11 und einer Android ist Android 13 In Android 11 Blur funktioniert nicht ordnungsgemäß. Kann mir jemand helfen, dieses Problem mit Renderscript zu beheben? . Der Unschärfeeffekt funktioniert perfekt auf [b] Android 12 und über [/b], wo ich Rendereffect.CreateblureFect () 
verwende. Auf Android 11 und unter , wo ich Renderscript verwende, wird der Unschärfeneffekt entweder nicht richtig angewendet oder überhaupt nicht sichtbar .
Was ich implementiert habe:

< Strong> für Android 12+ → Verwenden von Rendereffect > Für Android 11 und unten → Verwenden von renderscript , um eine verschwommene Bitmap zu generieren und sie als ImageView zu überlösen.

< /ul>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post