<!-- XML Code_Manifest -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.example_9_3">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Example_9_3"
android:hardwareAccelerated="false">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<!-- XML Code -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<LinearLayout
android:id="@+id/iconlayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:id="@+id/iconplus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/plus"
android:background="#FFF"
android:layout_margin="10dp"/>
<ImageButton
android:id="@+id/iconminus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/minus"
android:background="#FFF"
android:layout_margin="10dp"/>
<ImageButton
android:id="@+id/iconrotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/rotate"
android:background="#FFF"
android:layout_margin="10dp"/>
<ImageButton
android:id="@+id/iconup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/lightup"
android:background="#FFF"
android:layout_margin="10dp"/>
<ImageButton
android:id="@+id/icondown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/lightdown"
android:background="#FFF"
android:layout_margin="10dp"/>
<ImageButton
android:id="@+id/iconblur"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/blur"
android:background="#FFF"
android:layout_margin="10dp"/>
<ImageButton
android:id="@+id/iconembo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/embo"
android:background="#FFF"
android:layout_margin="10dp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/picturelayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center"
android:layout_weight="9"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
// JAVA Code
package com.example.example_9_3;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.EmbossMaskFilter;
import android.graphics.MaskFilter;
import android.graphics.Paint;
import android.media.Image;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.widget.Filter;
import android.widget.ImageButton;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
LinearLayout iconLayout, pictureLayout;
ImageButton icon_plus, icon_minus, icon_rotate,
icon_lightUp, icon_lightDown, icon_blur, icon_Embarrassing;
MyGraphicView graphicView;
static float scaleX = 1, scaleY = 1, angle = 0, color = 1, blur = 0, Ebs = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iconLayout = (LinearLayout) findViewById(R.id.iconlayout);
pictureLayout = (LinearLayout) findViewById(R.id.picturelayout);
icon_plus = (ImageButton) findViewById(R.id.iconplus);
icon_minus = (ImageButton) findViewById(R.id.iconminus);
icon_rotate = (ImageButton) findViewById(R.id.iconrotate);
icon_lightUp = (ImageButton) findViewById(R.id.iconup);
icon_lightDown = (ImageButton) findViewById(R.id.icondown);
icon_blur = (ImageButton) findViewById(R.id.iconblur);
icon_Embarrassing = (ImageButton) findViewById(R.id.iconembo);
graphicView = (MyGraphicView) new MyGraphicView(this);
pictureLayout.addView(graphicView);
clickIcons();
}
private static class MyGraphicView extends View {
public MyGraphicView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Bitmap picture = BitmapFactory.decodeResource(getResources(), R.drawable.lena_256);
Paint paint = new Paint();
float[] array = { color, 0, 0, 0, 0,
0, color, 0, 0, 0,
0, 0, color, 0, 0,
0, 0, 0, 1, 0 };
ColorMatrix colorMatrix = new ColorMatrix(array);
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
BlurMaskFilter blurMaskFilter = new BlurMaskFilter(500, BlurMaskFilter.Blur.NORMAL);
EmbossMaskFilter embossMaskFilter
= new EmbossMaskFilter(new float[] {3, 3, 3}, 0.5f, 50, 10);
// BlurMaskFilter(float radius, BlurMaskFilter.Blur style)
// style : INNER, NORMAL, OUTER, SOLID
// EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius)
int cenX = this.getWidth() / 2;
int cenY = this.getHeight() / 2;
int picX = (this.getWidth() - picture.getWidth()) / 2;
int picY = (this.getHeight() - picture.getHeight()) / 2;
canvas.scale(scaleX, scaleY, cenX, cenY);
canvas.rotate(angle, cenX, cenY);
if (blur == 1) paint.setMaskFilter(blurMaskFilter); else ;
if (Ebs == 1) paint.setMaskFilter(embossMaskFilter); else;
canvas.drawBitmap(picture, picX, picY, paint);
picture.recycle();
}
}
private void clickIcons() {
icon_plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
scaleX = scaleX + 0.2f;
scaleY = scaleY + 0.2f;
graphicView.invalidate();
}
});
icon_minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
scaleX = scaleX - 0.2f;
scaleY = scaleY - 0.2f;
graphicView.invalidate();
}
});
icon_rotate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
angle = angle - 20;
graphicView.invalidate();
}
});
icon_lightUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
color = color + 0.2f;
graphicView.invalidate();
}
});
icon_lightDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
color = color - 0.2f;
graphicView.invalidate();
}
});
icon_blur.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (blur == 0) blur = 1;
else blur = 0;
graphicView.invalidate();
}
});
icon_Embarrassing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (Ebs == 0) Ebs = 1;
else Ebs = 0;
graphicView.invalidate();
}
});
}
}