Open top menu

In this tutorial explain how to convert  .png image to .bmp format.

Example:

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;

import android.graphics.Bitmap;

public class AndroidBmpUtil {
    private static  final int BMP_WIDTH_OF_TIMES = 4;
    private  static final int BYTE_PER_PIXEL = 3;

    public static boolean save(Bitmap orgBitmap, String filePath){

        if(orgBitmap == null){
            return false;
        }

        if(filePath == null){
            return false;
        }

        boolean isSaveSuccess = true;


        int width = orgBitmap.getWidth();
        int height = orgBitmap.getHeight();


        int dummySize = 0;
        byte[] dummyBytesPerRow = null;
        boolean hasDummy = false;
        if(isBmpWidth4Times(width)){
            hasDummy = true;
            dummySize = BMP_WIDTH_OF_TIMES - (width % BMP_WIDTH_OF_TIMES);
            dummyBytesPerRow = new byte[dummySize * BYTE_PER_PIXEL];
            for(int i = 0; i < dummyBytesPerRow.length; i++){
                dummyBytesPerRow[i] = (byte)0xFF;
            }
        }

        int[] pixels = new int[width * height];
        int imageSize = pixels.length * BYTE_PER_PIXEL + (height * dummySize * BYTE_PER_PIXEL);
        int imageDataOffset = 0x36;
        int fileSize = imageSize + imageDataOffset;


        orgBitmap.getPixels(pixels, 0, width, 0, 0, width, height);


        ByteBuffer buffer = ByteBuffer.allocate(fileSize);

        try {

            buffer.put((byte)0x42);
            buffer.put((byte)0x4D);

            //size            buffer.put(writeInt(fileSize));

            //reserved            buffer.put(writeShort((short)0));
            buffer.put(writeShort((short)0));

            //image data start offset            buffer.put(writeInt(imageDataOffset));

            //size            buffer.put(writeInt(0x28));

            //width, height            buffer.put(writeInt(width));
            buffer.put(writeInt(height));

            //planes            buffer.put(writeShort((short)1));

            //bit count            buffer.put(writeShort((short)24));

            //bit compression            buffer.put(writeInt(0));

            //image data size            buffer.put(writeInt(imageSize));

            //horizontal resolution in pixels per meter            buffer.put(writeInt(0));

            //vertical resolution in pixels per meter (unreliable)            buffer.put(writeInt(0));


            buffer.put(writeInt(0));


            buffer.put(writeInt(0));


            int row = height;
            int col = width;
            int startPosition = 0;
            int endPosition = 0;

            while( row > 0 ){

                startPosition = (row - 1) * col;
                endPosition = row * col;

                for(int i = startPosition; i < endPosition; i++ ){
                    buffer.put(write24BitForPixcel(pixels[i]));

                    if(hasDummy){
                        if(isBitmapWidthLastPixcel(width, i)){
                            buffer.put(dummyBytesPerRow);
                        }
                    }
                }
                row--;
            }

            FileOutputStream fos = new FileOutputStream(filePath);
            fos.write(buffer.array());
            fos.close();
        } catch (IOException e1) {
            e1.printStackTrace();
            isSaveSuccess = false;
        }
        finally{

        }

        return isSaveSuccess;
    }


    private static  boolean isBitmapWidthLastPixcel(int width, int i) {
        return i > 0 && (i % (width - 1)) == 0;
    }


    private static  boolean isBmpWidth4Times(int width) {
        return width % BMP_WIDTH_OF_TIMES > 0;
    }


    private static  byte[] writeInt(int value) throws IOException {
        byte[] b = new byte[4];

        b[0] = (byte)(value & 0x000000FF);
        b[1] = (byte)((value & 0x0000FF00) >> 8);
        b[2] = (byte)((value & 0x00FF0000) >> 16);
        b[3] = (byte)((value & 0xFF000000) >> 24);

        return b;
    }


    private static  byte[] write24BitForPixcel(int value) throws IOException {
        byte[] b = new byte[3];

        b[0] = (byte)(value & 0x000000FF);
        b[1] = (byte)((value & 0x0000FF00) >> 8);
        b[2] = (byte)((value & 0x00FF0000) >> 16);

        return b;
    }


    private static  byte[] writeShort(short value) throws IOException {
        byte[] b = new byte[2];

        b[0] = (byte)(value & 0x00FF);
        b[1] = (byte)((value & 0xFF00) >> 8);

        return b;
    }

}



Create Main Class


GestureOverlayView mSignature;
mSignature=  (GestureOverlayView) findViewById(R.id.shape_1_1);
WitnessSignature.setDrawingCacheEnabled(true);
Bitmap bitmap= Bitmap.createBitmap(mSignature.getDrawingCache());
AndroidBmpUtil.save(getResized(offenderBitmap, 384), 
Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/offender.bmp");

File fil = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES).getAbsolutePath(), "offender.bmp");

 










Read more


Indicator for ExpandableListView ?


Explain how to used group indicator for custom ExpandableListView in android. you should be add line of code in group view in custom Adapter class.


int imageResourceId = isExpanded ? android.R.drawable.arrow_up_float : android.R.drawable.arrow_down_float;
image.setImageResource(imageResourceId);
image.setVisibility(View.VISIBLE);



ExpandableListView Example

Read more


Print HTML document and webpage in android application.
Printing an html doc with webview involves loading an html res or building an html doc as a string.

Creating custom print view step by step

1.       Creat a webviewclient that starts a print job after the html res is loaded.
2.       Load the html res into the webview object.

private WebView testWebView;

private void TestWebViewPrint() {
   
// Create a WebView object specifically for printing
   
WebView webView = new WebView(this);
    webView.setWebViewClient(
new WebViewClient() {

       
public boolean shouldOverrideUrlLoading(WebView view, String url) {
           
return false;
        }

       
@Override
        
public void onPageFinished(WebView view, String url) {
            Log.i(
"TAG", "page finished loading " + url);
            createTestWebPrintJob(view);
           
testWebView = null;
        }
    });

   
// Generate an HTML document on the fly:
   
String htmlDocument = "

Test Content

Androidbeginner tutorial point, "
+
           
"Hello, Hello...
";
    webView.loadDataWithBaseURL(
null, htmlDocument, "text/HTML", "UTF-8", null);

   
// Keep a reference to WebView object until you pass the PrintDocumentAdapter
    // to the PrintManager
   
testWebView = webView;
}


private void createTestWebPrintJob(WebView webView) {
   
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {

        PrintManager printManager = (PrintManager)
this.getSystemService(Context.PRINT_SERVICE);

        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();

        String jobName = getString(R.string.
app_name) + " Print Test";

        printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
    }
}

you can load a webpage for printing by replacing the method loadUrl().
 webView.loadUrl("https://developer.android.com/distribute/index.html");



Read more


Example - How to check Bluetooth Off Or On

<uses-permission android:name="android.permission.BLUETOOTH" />

private boolean getBlueToothOn(Context context) {
    BluetoothAdapter btAdapter = ((Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1)
            ? ((BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter()
            : (BluetoothAdapter.getDefaultAdapter()));

    if (btAdapter == null) {
        return false;
    }
    if (btAdapter.getState() == BluetoothAdapter.STATE_ON) {
        return true;
    }
}
Read more

Example :-How to set Button background Tint

1.In AppCompact library, we can set button background tint .

<Button
   
android:id="@+id/btn_done"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:layout_below="@+id/seq_layout_attr"
    android:layout_margin="30dp"
    android:backgroundTint="@color/colorPrimary"
    android:text="@string/summit"
    android:textSize="@dimen/textSize"
    android:textColor="@color/white"
    android:textStyle="bold" />


2. Drawable background for a view based on a color (int) value. I succeeded by using the code:

ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{colors});
btn_done.setBackgroundTintList(csl);

3. create a Color State List Resource.

xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <
item
       
android:color="#your_color_here" />
</
selector>


  btn_done .setBackgroundTintList(this.getResources()
                                                             .getColorStateList(R.color.your_xml_name));





Read more