Open top menu


Explain:- How to Implement SignatureView in Android?



Open Your build.gradle and make sure that maven entral repository is declared .
repositories {
    jcenter()
    mavenCentral()
}

Then include the library Dependency:
dependencies {
 

   
compile 'com.github.gcacace:signature-pad:1.2.0'
   
}


..................................................................................... 
activity_main.xml

 ..................................................................................... 
xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:id="@+id/activity_main"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
android:paddingBottom="@dimen/activity_vertical_margin"
   
android:paddingLeft="@dimen/activity_horizontal_margin"
   
android:paddingRight="@dimen/activity_horizontal_margin"
   
android:paddingTop="@dimen/activity_vertical_margin"
   
tools:context="com.project.example.signatureviewdemoproject.MainActivity">

    <
com.github.gcacace.signaturepad.views.SignaturePad
       
android:layout_width="fill_parent"
       
android:layout_height="fill_parent"
       
android:id="@+id/signature_View" />
    <
LinearLayout
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:weightSum="2"
       
android:orientation="horizontal">
        <
Button
           
android:layout_width="match_parent"
           
android:layout_height="match_parent"
           
android:layout_weight="1"
           
android:text="Clear Signature"
           
android:id="@+id/ClearButton"/>

        <
Button
           
android:layout_width="match_parent"
            
android:layout_height="match_parent"
           
android:id="@+id/SaveButton"
           
android:text="Save Signature"
           
android:layout_weight="1"/>
    </
LinearLayout>
</
RelativeLayout>
 ..................................................................................... 

MarshMallowPermission.Java

Add permission Class ,the class get permission on run Time For MarshMallow.

..................................................................................... 

public class MarshMallowPermission {
   
public static final int RECORD_PERMISSION_REQUEST_CODE = 1;
   
public static final int EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 2;
   
public static final int CAMERA_PERMISSION_REQUEST_CODE = 3;
   
public static final int READ_PHONE_STATE_PERMISSION_REQUEST_CODE = 4;
    Activity
activity;

   
public MarshMallowPermission(Activity activity) {
       
this.activity = activity;
    }

   
public boolean checkPermissionForRecord(){
       
int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO);
       
if (result == PackageManager.PERMISSION_GRANTED){
           
return true;
        }
else {
           
return false;
        }
    }

   
public boolean checkPermissionForExternalStorage(){
       
int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
       
if (result == PackageManager.PERMISSION_GRANTED){
           
return true;
        }
else {
           
return false;
        }
    }

   
public boolean checkPermissionForCamera(){
       
int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA);
       
if (result == PackageManager.PERMISSION_GRANTED){
           
return true;
        }
else {
           
return false;
        }
    }

   
public boolean checkPermissionForReadPhoneState(){
       
int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE);
       
if (result == PackageManager.PERMISSION_GRANTED){
           
return true;
        }
else {
           
return false;
        }
    }

   
public void requestPermissionForRecord(){
       
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.RECORD_AUDIO)){
            Toast.makeText(
activity, "Microphone permission needed for recording. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        }
else {
            ActivityCompat.requestPermissions(
activity,new String[]{Manifest.permission.RECORD_AUDIO},RECORD_PERMISSION_REQUEST_CODE);
        }
    }

   
public void requestPermissionForExternalStorage(){
       
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)){
            Toast.makeText(
activity, "External Storage permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        }
else {
            ActivityCompat.requestPermissions(
activity,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE);
        }
    }

   
public void requestPermissionForCamera(){
       
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)){
            Toast.makeText(
activity, "Camera permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        }
else {
            ActivityCompat.requestPermissions(
activity,new String[]{Manifest.permission.CAMERA},CAMERA_PERMISSION_REQUEST_CODE);
        }
    }

   
public void requestPermissionReadPhoneState(){
       
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.READ_PHONE_STATE)){
            Toast.makeText(
activity, "Read Phone State permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        }
else {
            ActivityCompat.requestPermissions(
activity,new String[]{Manifest.permission.READ_PHONE_STATE},READ_PHONE_STATE_PERMISSION_REQUEST_CODE);
        }
    }
}

.....................................................................................  


MainActivity.Java
..................................................................................... 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   
private SignaturePad mSignatureView;
    Button
btnSvae, btnClear;
    MarshMallowPermission
permission;
   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main);
       
btnSvae = (Button) findViewById(R.id.SaveButton);
       
btnSvae.setOnClickListener(this);
       
btnClear = (Button) findViewById(R.id.ClearButton);
       
btnClear.setOnClickListener(this);
       
mSignatureView = (SignaturePad) findViewById(R.id.signature_View);
       
mSignatureView.setOnSignedListener(new SignaturePad.OnSignedListener() {
           
@Override
           
public void onStartSigning() {

                Toast.makeText(MainActivity.
this, "OnStartSigning", Toast.LENGTH_SHORT).show();
            }

           
@Override
           
public void onSigned() {
                
btnSvae.setEnabled(true);
               
btnClear.setEnabled(true);
            }

           
@Override
           
public void onClear() {
               
btnSvae.setEnabled(false);
               
btnClear.setEnabled(false);
            }
        });
    }

   
@Override
   
public void onClick(View v) {
       
switch (v.getId()) {

           
case R.id.SaveButton:
               
permission=new MarshMallowPermission(this);
               
if (!permission.checkPermissionForExternalStorage()){
                   
permission.requestPermissionForExternalStorage();
                }
else {
                    Bitmap signatureBitmap =
mSignatureView.getSignatureBitmap();
                   
if (addJpgSignatureToGallery(signatureBitmap)) {
                        Toast.makeText(MainActivity.
this, "Signature saved into the Gallery", Toast.LENGTH_SHORT).show();
                    }
else {
                        Toast.makeText(MainActivity.
this, "Unable to store the signature", Toast.LENGTH_SHORT).show();
                    }

                   
if (addSvgSignatureToGallery(mSignatureView.getSignatureSvg())) {
                        Toast.makeText(MainActivity.
this, "SVG Signature saved into the Gallery", Toast.LENGTH_SHORT).show();
                    }
else {
                        Toast.makeText(MainActivity.
this, "Unable to store the SVG signature", Toast.LENGTH_SHORT).show();
                    }
                }
               
break;

           
case R.id.ClearButton:
               
mSignatureView.clear();
               
break;
        }

    }

   
public File getAlbumStorageDir(String albumName) {
       
// Get the directory for the user's public pictures directory.
       
File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.
DIRECTORY_PICTURES), albumName);
       
if (!file.mkdirs()) {
            Log.e(
"SignaturePad", "Directory not created");
        }
       
return file;
    }

   
public void saveBitmapToJPG(Bitmap bitmap, File photo) throws IOException {
        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.
ARGB_8888);
        Canvas canvas =
new Canvas(newBitmap);
        canvas.drawColor(Color.
WHITE);
        canvas.drawBitmap(bitmap,
0, 0, null);
        OutputStream stream =
new FileOutputStream(photo);
        newBitmap.compress(Bitmap.CompressFormat.
JPEG, 80, stream);
        stream.close();
    }

   
public boolean addJpgSignatureToGallery(Bitmap signature) {
       
boolean result = false;
       
try {
            File photo =
new File(getAlbumStorageDir("SignaturePad"), String.format("Signature_%d.jpg", System.currentTimeMillis()));
            saveBitmapToJPG(signature, photo);
            scanMediaFile(photo);
            result =
true;
        }
catch (IOException e) {
            e.printStackTrace();
        }
       
return result;
    }

   
private void scanMediaFile(File photo) {
        Intent mediaScanIntent =
new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri contentUri = Uri.fromFile(photo);
        mediaScanIntent.setData(contentUri);
        MainActivity.
this.sendBroadcast(mediaScanIntent);
    }

   
public boolean addSvgSignatureToGallery(String signatureSvg) {
       
boolean result = false;
       
try {
            File svgFile =
new File(getAlbumStorageDir("SignaturePad"), String.format("Signature_%d.svg", System.currentTimeMillis()));
            OutputStream stream =
new FileOutputStream(svgFile);
            OutputStreamWriter writer =
new OutputStreamWriter(stream);
            writer.write(signatureSvg);
            writer.close();
            stream.flush();
            stream.close();
            scanMediaFile(svgFile);
            result =
true;
        }
catch (IOException e) {
            e.printStackTrace();
        }
       
return result;
    }
}
..................................................................................... 


Read more







Explain-: How to Remove Index row from listView  OnItemClick?


Activity_main.xml.
……………………………………………………………………………………………………………………………………
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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.project.example.listviewremoveindex.MainActivity">
    <ListView

        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
……………………………………………………………...........

MainActivity.Java.
……………………………………………………………………
package com.project.example.listviewremoveindex;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    ListView list;
    Button btnAdd, btnRemove;
    ArrayList listarray=new ArrayList<>();

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

        // Add Values
       
for (int i=0;i<10;i++){
            listarray.add("Item "+i);
        }
        list = (ListView) findViewById(R.id.list_item);
        final ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1, listarray);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
           
public void onItemClick(AdapterView parent, View view, int position, long id) {




                String slelctitem=listarray.get(position);
                Toast.makeText(getApplicationContext(),slelctitem+" deleted",Toast.LENGTH_SHORT).show();
                listarray.remove(position);
                adapter.notifyDataSetChanged();

            }
        });
    }



}




Read more





Exaplain- Tween Animation define an xml that perform transition such as rotating,move and stretching etc.

hyprespasce_one_anim.xml
............................................................................................................
xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
       
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           
android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:startOffset="700"
            android:duration="400"
            android:fillBefore="false" />
        <rotate
           
android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:startOffset="700"
            android:duration="400" />
    </set>
</set>



............................................................................................................
 
activity_main.xml
............................................................................................................
xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
       
android:id="@+id/img_animation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="42dp"
        android:src="@drawable/log_icon" />
    
    <Button
       
android:text="Start Move"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/button" />

</RelativeLayout>


............................................................................................................

MainActivity.java
............................................................................................................
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    Animation animTogether;
    ImageView img_animation;
    @Override
   
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_animation= (ImageView) findViewById(R.id.img_animation);
        Button btn=(Button) findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
           
public void onClick(View v) {


                 ObjectAnimator animX = ObjectAnimator.ofFloat(img_animation, "x", 100f);
                 ObjectAnimator animY = ObjectAnimator.ofFloat(img_animation, "y", 100f);
                 AnimatorSet animSetXY = new AnimatorSet();
                 animSetXY.playTogether(animX, animY);
                 animSetXY.start();


                animTogether = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.hyprespace_one_anim);
                img_animation.startAnimation(animTogether);

            }
        });
    }
}


............................................................................................................




Read more




Example- Explain Translate Animation in android?

Translate Animation that controls positions. Initialize this animation with the dimension in the objects beings animated. show this example ..move image top to right bottom ..


TranslateAnimation animation = new 
TranslateAnimation(float fromXDelta, float toXDelta,float fromYDelta,
                         float toYDelta) ;
animation.setDuration(5000);


you can assign all float value accordingly. 

Example Code-

activity_main.xml.
............................................................................................................


xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ImageView
       
android:id="@+id/img_animation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="42dp"
        android:src="@mipmap/ic_launcher" />
</RelativeLayout>


............................................................................................................


MainActivity.java
............................................................................................................
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    Animation animTogether;
    @Override
   
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView img_animation = (ImageView) findViewById(R.id.img_animation);

        TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
        TranslateAnimation animation = new TranslateAnimation(0.0f, 400.0f, 0.0f, 1000.0f);
        animation.setDuration(5000);
        animation.setRepeatCount(Animation.INFINITE);
        animation.setRepeatMode(2);
        animation.setFillAfter(true);
        img_animation.startAnimation(animation);


    }
}


............................................................................................................














Read more